Функция RtlLookupElementGenericTable (ntddk.h)

Подпрограмма RtlLookupElementGenericTable выполняет поиск элемента, соответствующего указанным данным, в универсальной таблице.

Синтаксис

NTSYSAPI PVOID RtlLookupElementGenericTable(
  PRTL_GENERIC_TABLE Table,
  PVOID              Buffer
);

Параметры

Table

Указатель на универсальную таблицу (RTL_GENERIC_TABLE). Таблица должна быть инициализирована путем вызова RtlInitializeGenericTable.

Buffer

Буфер данных поиска для передачи в CompareRoutine , зарегистрированный при инициализации универсальной таблицы RtlInitializeGenericTable . Дополнительные сведения см. в описании RtlInitializeGenericTable.

Возвращаемое значение

RtlLookupElementGenericTable возвращает указатель на предоставленные вызывающим объектом данные для нужного элемента в универсальной таблице. Он возвращает значение NULL , если универсальная таблица в настоящее время не содержит элементов или если соответствующий элемент не найден.

Комментарии

При обнаружении соответствующего элемента RtlLookupElementGenericTable повторно балансирует дерево воспроизведения универсальной таблицы.

Вызывающие объект Rtl.. Подпрограммы GenericTable отвечают за исключительно синхронизацию доступа к универсальной таблице. Эксклюзивный быстрый мьютекс является наиболее эффективным механизмом синхронизации для этой цели.

По умолчанию операционная система использует деревья splay для реализации универсальных таблиц. В некоторых случаях операции с деревом splay сделают дерево глубоким и узким и может даже превратить его в прямую линию. Очень глубокие деревья ухудшают производительность поиска. С помощью деревьев Adelson-Velsky/Landis (AVL) можно обеспечить более сбалансированную и неглубокую реализацию универсальных таблиц. Если вы хотите настроить универсальные подпрограммы таблицы для использования деревьев AVL вместо деревьев splay в драйвере, вставьте следующую инструкцию define в общий файл заголовка перед включением ntddk.h:

`#define RTL_USE_AVL_TABLES 0`

Если вы не определили RTL_USE_AVL_TABLES, как указано выше, необходимо использовать форму AVL универсальных табличных подпрограмм. Например, используйте подпрограмму RtlLookupElementGenericTableAvl вместо RtlLookupElementGenericTable. При вызове RtlLookupElementGenericTableAvl вызывающий объект должен передать RTL_AVL_TABLE табличную структуру, а не RTL_GENERIC_TABLE.

Вызывающие элементы RtlLookupElementGenericTable должны выполняться на DISPATCH_LEVEL IRQL < , если выполняется одно из следующих условий:

  • Память, выделенная вызывающим объектом в table или в буфере , доступна на страницы.

  • Объект CompareRoutine , предоставленный вызывающей стороны, содержит код, доступный для страниц.

В противном случае вызывающие средства RtlLookupElementGenericTable могут выполняться по адресу IRQL <= DISPATCH_LEVEL при использовании нестраничной памяти или кода.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL См. раздел "Примечания".

См. также раздел

RTL_AVL_TABLE

RTL_GENERIC_TABLE

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements