Функция 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 (см. раздел "Примечания")

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

RtlEnumerateGenericTableWithoutSplayingAvl