Функция 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, для возврата каждого последующего совпадения.
По умолчанию операционная система использует деревья splay для реализации универсальных таблиц, но подпрограмма RtlLookupFirstMatchingElementGenericTableAvlработает только с деревьями Adelson-Velsky/Landis (AVL). В некоторых случаях операции с деревом splay сделают дерево глубоким и узким и может даже превратить его в прямую линию. Очень глубокие деревья ухудшают производительность поиска. С помощью деревьев Adelson-Velsky/Landis (AVL) можно обеспечить более сбалансированную и неглубокую реализацию универсальных таблиц. Если вы хотите настроить универсальные подпрограммы таблицы для использования деревьев AVL вместо деревьев splay в драйвере, вставьте следующую инструкцию define в общий файл заголовка перед включением Ntddk.h:
#define RTL_USE_AVL_TABLES 0
Если RTL_USE_AVL_TABLES не определен, необходимо использовать форму AVL универсальных подпрограмм таблиц.
Вызывающие элементы RtlLookupFirstMatchingElementGenericTableAvl должны выполняться в <= APC_LEVEL, если выполняется одно из следующих условий:
- Память, выделенная вызывающим объектом в table или в буфере , доступна на страницы.
- Объект CompareRoutine, предоставленный вызывающей стороны, содержит код, доступный для страниц.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows Vista. |
Целевая платформа | Универсальное |
Верхняя часть | ntddk.h (включая FltKernel.h, Ntifs.h, Ntddk.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL (см. раздел "Примечания") |