Compartir a través de


Función RtlLookupElementGenericTable (ntddk.h)

El RtlLookupElementGenericTable rutina busca una tabla genérica para un elemento que coincida con los datos especificados.

Sintaxis

NTSYSAPI PVOID RtlLookupElementGenericTable(
  PRTL_GENERIC_TABLE Table,
  PVOID              Buffer
);

Parámetros

Table

Puntero a la tabla genérica (RTL_GENERIC_TABLE). La tabla debe haberse inicializado llamando a RtlInitializeGenericTable.

Buffer

Búfer de datos de búsqueda que se van a pasar al compareRoutine deRtlInitializeGenericTable inicializó la tabla genérica. Para obtener más información, vea la descripción de RtlInitializeGenericTable.

Valor devuelto

rtlLookupElementGenericTable devuelve un puntero a los datos proporcionados por el autor de la llamada para el elemento deseado en la tabla genérica. Devuelve null si actualmente la tabla genérica no tiene elementos o si no se encuentra ningún elemento coincidente.

Observaciones

Si se encuentra un elemento coincidente, RtlLookupElementGenericTable vuelve a equilibrar el árbol de reproducción de la tabla genérica.

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 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 define RTL_USE_AVL_TABLES como se especificó anteriormente, debe usar el formulario AVL de las rutinas de tabla genéricas. Por ejemplo, use la rutina de RtlLookupElementGenericTableAvl en lugar de RtlLookupElementGenericTable. En la llamada a RtlLookupElementGenericTableAvl, 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 rtlLookupElementGenericTable deben ejecutarse en IRQL < DISPATCH_LEVEL si alguna de las condiciones siguientes contiene:

  • La memoria asignada por el autor de la llamada en Table o en buffer es paginable.

  • El CompareRoutine proporcionado por el autor de la llamada contiene código paginable.

De lo contrario, los autores de llamadas de RtlLookupElementGenericTable pueden ejecutarse en IRQL <= DISPATCH_LEVEL cuando se usa código o memoria no paginada.

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.

Consulte también

RTL_AVL_TABLE

RTL_GENERIC_TABLE

RtlInitializeGenericTable

rtlIsGenericTableEmpty

rtlNumberGenericTableElements