Функция 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 отвечают за исключительно синхронизацию доступа к универсальной таблице. Эксклюзивный быстрый мьютекс является наиболее эффективным механизмом синхронизации, используемым для этой цели.
По умолчанию операционная система использует деревья воспроизведения для реализации универсальных таблиц. При некоторых обстоятельствах операции с деревом воспроизведения сделают дерево глубоким и узким и даже может превратить его в прямую линию. Очень глубокие деревья ухудшают производительность поиска. Вы можете обеспечить более сбалансированную, неглубокую реализацию универсальных таблиц с помощью деревьев Adelson-Velsky/Landis (AVL). Если вы хотите настроить универсальные подпрограммы таблиц для использования деревьев AVL вместо деревьев воспроизведения в драйвере, вставьте следующую инструкцию определения в общий файл заголовка перед включением ntddk.h:
`#define RTL_USE_AVL_TABLES 0`
Если вы не определяете RTL_USE_AVL_TABLES, как указано выше, необходимо использовать форму AVL универсальных подпрограмм таблиц. Например, используйте подпрограмму RtlLookupElementGenericTableAvl вместо RtlLookupElementGenericTable. В вызове RtlLookupElementGenericTableAvlвызывающий объект должен передать структуру таблицы RTL_AVL_TABLE, а не RTL_GENERIC_TABLE.
Вызывающие RtlLookupElementGenericTable должны выполняться в IRQL < DISPATCH_LEVEL, если имеет одно из следующих условий:
Выделенная вызывающей памятью таблица или буфера можно пространить.
Вызывающий CompareRoutine содержит код, доступный для страниц.
В противном случае вызывающие RtlLookupElementGenericTable могут выполняться в IRQL <= DISPATCH_LEVEL при использовании нестраничной памяти или кода.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | ntddk.h (include Ntddk.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | См. раздел "Примечания". |