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


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

Подпрограмма RtlEnumerateGenericTableWithoutSplayingAvl используется для перечисления элементов в универсальной таблице.

Синтаксис

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplayingAvl(
  [in]      PRTL_AVL_TABLE Table,
  [in, out] PVOID          *RestartKey
);

Параметры

[in] Table

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

[in, out] RestartKey

Адрес элемента, возвращаемого предыдущим вызовом RtlEnumerateGenericTableWithoutSplayingAvl. Следует задать значение NULL, если перечисление должно начинаться с первого элемента таблицы.

Чтобы перечислить все элементы в таблице, используйте RtlEnumerateGenericTableWithoutSplayingAvl следующим образом:

RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey);
     ptr != NULL;
     ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey)) {
        // Process the element pointed to by ptr
}

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

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

Замечания

RtlEnumerateGenericTableWithoutSplayingAvl можно вызывать многократно для обработки данных вызывающего объекта в каждом элементе универсальной таблицы.

Элементы возвращаются в возвращаемом порядке, как определено параметром PRTL_AVL_COMPARE_ROUTINE, предоставленным для RtlInitializeGenericTableAvl.

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

#define RTL_USE_AVL_TABLES 0

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

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ntddk.h (include Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL См. раздел "Примечания".

См. также

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl