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


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

Подпрограмма RtlGetElementGenericTableAvl возвращает указатель на предоставленные вызывающим данными для определенного универсального элемента таблицы Adelson-Velsky/Landis (AVL).

Синтаксис

NTSYSAPI PVOID RtlGetElementGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] ULONG          I
);

Параметры

[in] Table

Указатель на универсальную таблицу AVL (RTL_AVL_TABLE), из которой извлекается элемент Ith. Таблица должна быть инициализирована путем вызова RtlInitializeGenericTableAvl.

[in] I

Индекс выбранного элемента. Это значение является отсчитываемым от нуля, поэтому индекс последнего вставленного элемента в table всегда меньше значения, возвращаемого RtlNumberGenericTableElementsAvl.

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

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

Замечания

RtlGetElementGenericTableAvl возвращает элемент Ith, вставленный в универсальную таблицу AVL. Чтобы получить первый элемент, задайте равным нулю. Чтобы получить последний элемент, задайте для I значение (RtlNumberGenericTableElementsAvl(Table)-1). Обратите внимание, что если элемент удаляется из универсальной таблицы, индексы всех элементов, вставляемых после уменьшения удаленного элемента. Таким образом, индекс элемента может измениться с течением времени.

RtlGetElementGenericTableAvl эффективнее, чем RtlLookupElementGenericTableAvl, если вызывающий объект может предоставить индекс определенного элемента, для которого вызывающий объект должен получить доступ к связанным данным. Однако вызов RtlGetElementGenericTableAvl многократно для проверки такого элемента является менее эффективным, чем вызов RtlLookupElementGenericTableAvl, чтобы найти его.

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

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

#define RTL_USE_AVL_TABLES 0

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

Вызывающие RtlGetElementGenericTableAvl должны выполняться в IRQL < DISPATCH_LEVEL если вызываемая память для универсальной таблицы может быть на страницу.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows XP.
целевая платформа Всеобщий
заголовка ntddk.h (include Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень (см. примечания)

См. также

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl