Función RtlGetElementGenericTableAvl (ntddk.h)

La rutina RtlGetElementGenericTableAvl devuelve un puntero a los datos proporcionados por el autor de la llamada para un elemento de tabla Adelson-Velsky/Landis (AVL) genérico determinado.

Sintaxis

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

Parámetros

[in] Table

Puntero a la tabla AVL genérica (RTL_AVL_TABLE) desde la que se va a recuperar el elemento I. La tabla debe haberse inicializado llamando a RtlInitializeGenericTableAvl.

[in] I

Índice del elemento seleccionado. Este valor es de base cero, por lo que el índice del último elemento insertado actualmente en Table es siempre uno menor que el valor devuelto por RtlNumberGenericTableElementsAvl.

Valor devuelto

RtlGetElementGenericTableAvl devuelve un puntero a los datos proporcionados por el autor de la llamada para el elemento Ien la tabla AVL genérica. Devuelve NULL si el valor de I especificado es demasiado grande o si la tabla AVL genérica no tiene actualmente ningún elemento.

Comentarios

RtlGetElementGenericTableAvl devuelve el elemento Iinsertado en la tabla AVL genérica. Para recuperar el primer elemento, establezca I en cero. Para recuperar el último elemento, establezca I en (RtlNumberGenericTableElementsAvl(Table)-1). Tenga en cuenta que si se elimina un elemento de la tabla genérica, los índices de todos los elementos insertados después del elemento eliminado se reducen. Por lo tanto, el índice de un elemento puede cambiar con el tiempo.

RtlGetElementGenericTableAvl es más eficaz que RtlLookupElementGenericTableAvl si el llamador puede proporcionar el índice de un elemento determinado para el que el autor de la llamada necesita acceso a los datos asociados. Sin embargo, llamar a RtlGetElementGenericTableAvl repetidamente para probar este tipo de elemento es menos eficaz que llamar a RtlLookupElementGenericTableAvl para localizarlo.

Llamadores de Rtl.. Las rutinas GenericTable 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 fin.

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 formato AVL de las rutinas de tabla genéricas. Por ejemplo, use la rutina RtlGetElementGenericTableAvl en lugar de RtlGetElementGenericTable. En la llamada a RtlGetElementGenericTableAvl, 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 RtlGetElementGenericTableAvl 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
Cliente mínimo compatible Disponible con Windows XP.
Plataforma de destino Universal
Encabezado ntddk.h (include Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL Cualquier nivel (ver comentarios)

Consulte también

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl