Функция RtlLookupFirstMatchingElementGenericTableAvl (ntddk.h)
Подпрограмма RtlLookupFirstMatchingElementGenericTableAvl находит левый элемент дерева, соответствующий указанным данным.
Синтаксис
NTSYSAPI PVOID RtlLookupFirstMatchingElementGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer,
[out] PVOID *RestartKey
);
Параметры
[in] Table
Указатель на универсальную таблицу Adelson-Velsky/Landis (AVL) (RTL_AVL_TABLE).
[in] Buffer
Буфер, содержащий данные поиска.
[out] RestartKey
В выходных данных содержит контекст поиска для использования с подпрограммой перечисления, например RtlEnumerateGenericTableWithoutSplayingAvl.
Возвращаемое значение
Подпрограмма RtlLookupFirstMatchingElementGenericTableAvlвозвращает указатель на соответствующие данные или NULL, если совпадение не найдено.
Замечания
Дерево, реализующее универсальную таблицу, может содержать несколько имен файлов, которые отличаются только в случае. Алгоритм поиска может использовать эту подпрограмму для поиска первого совпадения без ссылки на регистр и использовать подпрограмму перечисления, например, RtlEnumerateGenericTableWithoutSplayingAvl, чтобы вернуть каждое последующее совпадение.
По умолчанию операционная система использует деревья воспроизведения для реализации универсальных таблиц, но RtlLookupFirstMatchingElementGenericTableAvlподпрограмма работает только с деревьями Adelson-Velsky/Landis (AVL). При некоторых обстоятельствах операции с деревом воспроизведения сделают дерево глубоким и узким и даже может превратить его в прямую линию. Очень глубокие деревья ухудшают производительность поиска. Вы можете обеспечить более сбалансированную, неглубокую реализацию универсальных таблиц с помощью деревьев Adelson-Velsky/Landis (AVL). Если вы хотите настроить универсальные подпрограммы таблиц для использования деревьев AVL вместо деревьев воспроизведения в драйвере, вставьте следующую инструкцию определения в общий файл заголовка перед включением Ntddk.h:
#define RTL_USE_AVL_TABLES 0
Если RTL_USE_AVL_TABLES не определен, необходимо использовать форму AVL универсальных подпрограмм таблиц.
Вызывающие RtlLookupFirstMatchingElementGenericTableAvl должны работать в <= APC_LEVEL, если имеет одно из следующих условий:
- Выделенная вызывающей памятью таблица или буфера можно пространить.
- Вызывающий объект CompareRoutine содержит код, доступный для страниц.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows Vista. |
целевая платформа | Всеобщий |
заголовка | ntddk.h (include FltKernel.h, Ntifs.h, Ntddk.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL (см. раздел "Примечания") |