Función RtlEnumerateGenericTableWithoutSplayingAvl (ntddk.h)

La rutina RtlEnumerateGenericTableWithoutSplayingAvl se usa para enumerar los elementos de una tabla genérica.

Sintaxis

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

Parámetros

[in] Table

Puntero a la tabla genérica (RTL_AVL_TABLE). La tabla debe haberse inicializado llamando a RtlInitializeGenericTableAvl.

[in, out] RestartKey

Dirección del elemento devuelto por la llamada anterior a RtlEnumerateGenericTableWithoutSplayingAvl. Debe establecerse en NULL si la enumeración se inicia en el primer elemento de la tabla.

Para enumerar todos los elementos de la tabla, use RtlEnumerateGenericTableWithoutSplayingAvl de la siguiente manera:

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

Valor devuelto

RtlEnumerateGenericTableWithoutSplayingAvl devuelve un puntero a la estructura definida por el autor de la llamada asociada al elemento . Devuelve NULL si RestartKey es NULL y la tabla no tiene elementos o si RestartKey es un puntero devuelto y no hay ningún elemento siguiente.

Comentarios

La rutina RtlEnumerateGenericTableWithoutSplayingAvl no funciona realmente con un árbol de reproducción, sino que proporciona una rutina con nombre análogo a RtlEnumerateGenericTableWithoutSplayingAvl.

Se puede llamar repetidamente a RtlEnumerateGenericTableWithoutSplayingAvl para procesar los datos del autor de la llamada en cada elemento de una tabla genérica.

De forma predeterminada, el sistema operativo usa árboles de reproducción para implementar tablas genéricas, pero la rutina RtlLookupElementGenericTableFullAvl solo funciona con árboles Adelson-Velsky/Landis (AVL). Para configurar las rutinas de tabla genéricas para usar árboles AVL en lugar de árboles de reproducción en el controlador, inserte la siguiente instrucción define en un archivo de encabezado común antes de incluir Ntddk.h:

#define RTL_USE_AVL_TABLES 0

Si no se define RTL_USE_AVL_TABLES, debe usar el formato AVL de las rutinas de tabla genéricas. Por ejemplo, use la rutina RtlEnumerateGenericTableWithoutSplayingAvl en lugar de RtlEnumerateGenericTableWithoutSplaying. En la llamada a RtlEnumerateGenericTableWithoutSplayingAvl, el llamador debe pasar una estructura de tabla de RTL_AVL_TABLE en lugar de RTL_GENERIC_TABLE.

Autores de llamadas de rtl.. Las rutinas GenericTableAvl* son responsables de sincronizar exclusivamente el acceso a la tabla genérica. Una exclusión mutua rápida exclusiva es el mecanismo de sincronización más eficaz que se usará para este propósito.

Los autores de llamadas de RtlEnumerateGenericTableWithoutSplayingAvl deben ejecutarse en IRQL < DISPATCH_LEVEL si la memoria asignada por el autor de la llamada para la tabla genérica es paginable.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado ntddk.h (incluya Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL vea la sección Comentarios.

Consulte también

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl