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

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

Синтаксис

NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
  [in]  PRTL_AVL_TABLE      Table,
  [in]  PVOID               Buffer,
  [out] PVOID               *NodeOrParent,
  [out] TABLE_SEARCH_RESULT *SearchResult
);

Параметры

[in] Table

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

[in] Buffer

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

[out] NodeOrParent

В выходных данных значение, описывающее связь NodeOrParent с записью таблицы (node), которую ищет RtlLookupElementGenericTableFullAvl . Параметр SearchResult может иметь любое из следующих значений:

TableEmptyTree

Дерево было пустым. Содержимое NodeOrParentне было изменено.

TableFoundNode

Подпрограмма RtlLookupElementGenericTableFullAvl обнаружила запись таблицы, ключ которой соответствует данным в буфере. NodeOrParent содержит указатель на соответствующую запись.

TableInsertAsLeft

Подпрограмма RtlLookupElementGenericTableFullAvlнеобнаружила запись таблицы, ключ которой соответствует данным в буфере. Янехочу, чтобы запись, которую rtlLookupElementGenericTableFullAvl искали в таблице, это был бы левый дочерний элемент записи, на которую указывает NodeOrParent .

TableInsertAsRight

Подпрограмма RtlLookupElementGenericTableFullAvlнеобнаружила запись таблицы, ключ которой соответствует данным в буфере. Если запись, которую искал RtlLookupElementGenericTableFullAvl , была в таблице, она будет правильным дочерним элементом записи, на которую указывает NodeOrParent .

[out] SearchResult

Указатель на запись таблицы. Если подпрограмма RtlLookupElementGenericTableFullAvl соответствует записи, NodeOrParentуказывает на соответствующую запись. Если подпрограмме RtlLookupElementGenericTableFullAvl не удается найти совпадение, NodeOrParent указывает на запись, которая будет родительским элементом записи, которую искала подпрограмма RtlLookupElementGenericTableFullAvl .

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

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

Комментарии

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

#define RTL_USE_AVL_TABLES 0

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

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

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

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

Требования

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

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

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl