Функция RtlLookupElementGenericTableAvl (ntddk.h)

Подпрограмма RtlLookupElementGenericTableAvl ищет в универсальной таблице элемент, соответствующий указанным данным.

Синтаксис

NTSYSAPI PVOID RtlLookupElementGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] PVOID          Buffer
);

Параметры

[in] Table

Указатель на универсальную таблицу Adelson-Velsky/Landis (AVL) (RTL_AVL_TABLE). Таблица должна быть инициализирована путем вызова RtlInitializeGenericTableAvl.

[in] Buffer

Буфер данных поиска для передачи в CompareRoutine , зарегистрированный при инициализации универсальной таблицы RtlInitializeGenericTableAvl . Дополнительные сведения см. в описании RtlInitializeGenericTableAvl.

Возвращаемое значение

RtlLookupElementGenericTableAvl возвращает указатель на пользовательские данные, связанные с соответствующим элементом в универсальной таблице, или значение NULL , если в настоящее время в универсальной таблице нет элементов или если соответствующий элемент не найден.

Комментарии

По умолчанию операционная система использует деревья splay для реализации универсальных таблиц, но подпрограмма RtlLookupElementGenericTableAvl работает только с деревьями Adelson-Velsky/Landis (AVL). Чтобы настроить в универсальных подпрограммах таблицы использование деревьев AVL вместо деревьев splay в драйвере, вставьте следующую инструкцию define в общий файл заголовка перед включением Ntddk.h:

#define RTL_USE_AVL_TABLES 0

Если RTL_USE_AVL_TABLES не определен, необходимо использовать форму AVL универсальных табличных процедур. Например, используйте подпрограмму RtlLookupElementGenericTableAvl вместо RtlLookupElementGenericTable. В вызове RtlLookupElementGenericTableAvl вызывающий объект должен передать RTL_AVL_TABLE табличную структуру, а не RTL_GENERIC_TABLE.

Вызывающие Rtl.. Подпрограммы GenericTableAvl отвечают за исключительно синхронизацию доступа к универсальной таблице. Эксклюзивный быстрый мьютекс является наиболее эффективным механизмом синхронизации для этой цели.

Вызывающие элементы RtlLookupElementGenericTableAvl должны выполняться на DISPATCH_LEVEL IRQL < , если выполняется одно из следующих условий:

  • Память, выделенная вызывающим объектом, в table или в буфере является страничной.

  • Предоставленный вызывающим оператором CompareRoutine содержит страничный код.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL IRQL < (см. раздел "Примечания")

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

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl