Función RtlEnumerateGenericTableWithoutSplaying (ntddk.h)
La rutina de RtlEnumerateGenericTableWithoutSplaying se usa para enumerar los elementos de una tabla genérica.
Sintaxis
NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplaying(
[in] PRTL_GENERIC_TABLE Table,
[in, out] PVOID *RestartKey
);
Parámetros
[in] Table
Puntero a la tabla genérica (RTL_GENERIC_TABLE). La tabla debe haberse inicializado llamando a RtlInitializeGenericTable.
[in, out] RestartKey
Dirección del elemento devuelto por la llamada anterior a RtlEnumerateGenericTableWithoutSplaying. 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 RtlEnumerateGenericTableWithoutSplaying como se indica a continuación:
RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplaying(Table, &RestartKey);
ptr != NULL;
ptr = RtlEnumerateGenericTableWithoutSplaying(Table, &RestartKey)) {
// Process the element pointed to by ptr
}
Valor devuelto
RtlEnumerateGenericTableWithoutSplaying 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.
Observaciones
A diferencia de RtlEnumerateGenericTable, RtlEnumerateGenericTableWithoutSplaying no aplana la tabla genérica convirtiéndola de un árbol de reproducción en una lista vinculada ordenada. rtlEnumerateGenericTableWithoutSplaying es más eficaz y seguro para varios procesadores que RtlEnumerateGenericTable.
se puede llamar repetidamente al RtlEnumerateGenericTableWithoutSplaying para procesar los datos del autor de la llamada en cada elemento de una tabla genérica.
Llamadores del Rtl.. GenericTable rutinas 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.
De forma predeterminada, el sistema operativo usa árboles de reproducción para implementar tablas genéricas. En algunas circunstancias, las operaciones en un árbol de reproducción harán que el árbol sea profundo y estrecho e incluso puede convertirlo en una línea recta. Los árboles muy profundos degradan el rendimiento de las búsquedas. Puede garantizar una implementación de árbol más equilibrada y superficial de tablas genéricas mediante árboles Adelson-Velsky/Landis (AVL). Si desea 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 formulario AVL de las rutinas de tabla genéricas. Por ejemplo, use la rutina de RtlEnumerateGenericTableWithoutSplaying en lugar de RtlEnumerateGenericTableWithoutSplayingAvl. En la llamada a RtlEnumerateGenericTableWithoutSplayingAvl, el autor de la llamada debe pasar una estructura de tabla de RTL_AVL_TABLE en lugar de RTL_GENERIC_TABLE.
Los autores de llamadas de RtlEnumerateGenericTableWithoutSplaying 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 | Valor |
---|---|
de la plataforma de destino de | Universal |
encabezado de | ntddk.h (incluya Ntddk.h, Ntifs.h) |
biblioteca de | NtosKrnl.lib |
DLL de | NtosKrnl.exe |
irQL | Consulte la sección Comentarios. |