Поделиться через


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

См. также

RtlEnumerateGenericTableWithoutSplayingAvl