Función RtlLookupElementGenericTableFullAvl (ntddk.h)
La rutina RtlLookupElementGenericTableFullAvl busca en una tabla genérica un elemento que coincida con los datos especificados.
Sintaxis
NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer,
[out] PVOID *NodeOrParent,
[out] TABLE_SEARCH_RESULT *SearchResult
);
Parámetros
[in] Table
Puntero a la tabla genérica Adelson-Velsky/Landis (AVL) (RTL_AVL_TABLE). La tabla debe haberse inicializado llamando a RtlInitializeGenericTableAvl.
[in] Buffer
Búfer de datos de búsqueda que se pasarán a compareRoutine que se registró cuando RtlInitializeGenericTableAvl inicializó la tabla genérica. Para obtener más información, vea la descripción de RtlInitializeGenericTableAvl.
[out] NodeOrParent
En la salida, un valor que describe la relación de NodeOrParent con la entrada de tabla (nodo) que RtlLookupElementGenericTableFullAvl está buscando. El parámetro SearchResult puede tener cualquiera de los siguientes valores:
TableEmptyTree
El árbol estaba vacío. El contenido de NodeOrParentno se ha modificado.
TableFoundNode
La rutina RtlLookupElementGenericTableFullAvl encontró una entrada de tabla cuya clave coincide con los datos del búfer. NodeOrParent contiene un puntero a la entrada coincidente.
TableInsertAsLeft
La rutina RtlLookupElementGenericTableFullAvlnoencontró una entrada de tabla cuya clave coincide con los datos en Buffer. Nof la entrada que RtlLookupElementGenericTableFullAvl buscaba estaban en la tabla, sería el elemento secundario izquierdo de la entrada a la que NodeOrParent apunta.
TableInsertAsRight
La rutina RtlLookupElementGenericTableFullAvlnoencontró una entrada de tabla cuya clave coincide con los datos en Buffer. Si la entrada que RtlLookupElementGenericTableFullAvl busca se encontraba en la tabla, sería el elemento secundario derecho de la entrada a la que NodeOrParent apunta.
[out] SearchResult
Puntero a una entrada de tabla. Si la rutina RtlLookupElementGenericTableFullAvl coincide con una entrada, NodeOrParentapunta a la entrada coincidente. Si la rutina RtlLookupElementGenericTableFullAvl no encuentra una coincidencia, NodeOrParent apunta a la entrada que sería el elemento primario de la entrada que la rutina RtlLookupElementGenericTableFullAvl estaba buscando.
Valor devuelto
RtlLookupElementGenericTableFullAvl devuelve un puntero a los datos de usuario asociados al elemento coincidente de la tabla genérica, o NULL si la tabla genérica no tiene elementos o si no se encuentra ningún elemento coincidente.
Comentarios
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 reproducir árboles 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 RtlLookupElementGenericTableFullAvl en lugar de RtlLookupElementGenericTable. En la llamada a RtlLookupElementGenericTableFullAvl, el autor de la llamada debe pasar una estructura de tabla de RTL_AVL_TABLE en lugar de RTL_GENERIC_TABLE.
Llamadores 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 fin.
Los autores de llamadas de RtlLookupElementGenericTableFullAvl deben ejecutarse en IRQL < DISPATCH_LEVEL si alguna de las condiciones siguientes contiene:
- La memoria asignada por el autor de la llamada en la tabla o en el búfer es paginable.
- CompareRoutine proporcionado por el autor de la llamada contiene código paginable.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows XP. |
Plataforma de destino | Universal |
Encabezado | ntddk.h (include Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL (consulte la sección Comentarios) |