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