Función RtlInitializeGenericTableAvl (ntddk.h)
La rutina RtlInitializeGenericTableAvl inicializa una tabla genérica mediante árboles Adelson-Velsky/Landis (AVL).
Sintaxis
NTSYSAPI VOID RtlInitializeGenericTableAvl(
[out] PRTL_AVL_TABLE Table,
[in] PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
[in] PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
[in] PRTL_AVL_FREE_ROUTINE FreeRoutine,
[in, optional] PVOID TableContext
);
Parámetros
[out] Table
Puntero a un búfer asignado por el autor de la llamada, que debe ser al menos tamaño de(RTL_AVL_TABLE) bytes de tamaño, para contener la estructura de tabla genérica inicializada.
[in] CompareRoutine
Un punto de entrada de una rutina de devolución de llamada de comparación, declarada de la siguiente manera:
RTL_GENERIC_COMPARE_RESULTS
(*PRTL_AVL_COMPARE_ROUTINE) (
__in struct _RTL_AVL_TABLE *Table,
__in PVOID FirstStruct,
__in PVOID SecondStruct
);
Los parámetros CompareRoutine son los siguientes:
Tabla (CompareRoutine)
Puntero a la tabla genérica.
FirstStruct
Puntero al primer elemento que se va a comparar.
SecondStruct
Puntero al segundo elemento que se va a comparar.
El CompareRoutine debe realizar un seguimiento estricto del orden de todos los elementos de la tabla genérica para que pueda identificar cualquier elemento determinado. La estructura definida por el autor de la llamada para los datos de elementos normalmente incluye un miembro cuyo valor es único y se puede usar como clave de ordenación. Todos los Rtl... GenericTableAvl rutinas que llaman al CompareRoutine toman un puntero de búfer como parámetro, que se pasa a su vez al CompareRoutine. El búfer contiene un valor de clave proporcionado por el autor de la llamada que debe coincidir con el CompareRoutine a la clave del elemento que se está buscando.
Dados dos valores de clave de este tipo, el compareRoutine devuelve GenericLessThan, GenericGreaterThan, o GenericEqual.
[in] AllocateRoutine
Un punto de entrada de una rutina de devolución de llamada de asignación, declarada como sigue:
PVOID
(*PRTL_AVL_ALLOCATE_ROUTINE) (
__in struct _RTL_AVL_TABLE *Table,
__in CLONG ByteSize
);
Los parámetros AllocateRoutine son los siguientes:
Tabla (AllocateRoutine)
Puntero a la tabla genérica.
ByteSize
Número de bytes que se van a asignar.
Para cada nuevo elemento, se llama a la AllocateRoutine para asignar memoria para los datos proporcionados por el autor de la llamada más alguna memoria adicional para su uso por el Rtl... Rutinas de GenericTableAvl. Tenga en cuenta que, debido a esta "memoria adicional", las rutinas proporcionadas por el autor de la llamada no deben tener acceso al primer tamaño de de(RTL_BALANCED_LINKS) bytes de cualquier elemento de la tabla genérica.
[in] FreeRoutine
Un punto de entrada de una rutina de devolución de llamada de desasignación, declarada de la siguiente manera:
VOID
(*PRTL_AVL_FREE_ROUTINE) (
__in struct _RTL_AVL_TABLE *Table,
__in PVOID Buffer
);
Los parámetros freeRoutine son los siguientes:
Tabla (FreeRoutine)
Puntero a la tabla genérica.
Búfer
Puntero al elemento que se va a eliminar.
Rtl... GenericTableAvl rutinas llaman al freeRoutine de para desasignar la memoria de los elementos que se van a eliminar de la tabla genérica. El freeRoutine de es lo opuesto al AllocateRoutine.
[in, optional] TableContext
Puntero opcional a un contexto proporcionado por el autor de la llamada para la tabla genérica. Este parámetro puede ser null.
Valor devuelto
Ninguno
Observaciones
Los sistemas de archivos llaman a RtlInitializeGenericTableAvl para inicializar una tabla genérica para almacenar datos específicos del sistema de archivos, como la información de búsqueda de nombres para archivos abiertos actualmente. El criterio de ordenación, la estructura y el contenido de los elementos están definidos por el autor de la llamada.
Los sistemas de archivos deben llamar a RtlInitializeGenericTableAvl para inicializar la tabla genérica antes de usar cualquier otro Rtl... GenericTableAvl rutinas en la nueva tabla genérica. La estructura de tabla genérica inicializada debe considerarse opaca.
Llamadores del Rtl... GenericTableAvl 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.
Se llama al proporcionado por el autor de la llamada antes de que se el AllocateRoutine para localizar una ubicación adecuada en la que se debe insertar un nuevo elemento. También se llama al CompareRoutine antes de freeRoutine para localizar un elemento que se va a eliminar.
El RtlInitializeGenericTableAvl rutina asigna explícitamente una tabla genérica que usa árboles AVL. Uso de esta rutina y la otra Rtl... Las rutinas de GenericTableAvl son necesarias cuando se desean tablas basadas en árbol de AVL y no se define RTL_USE_AVL_TABLES antes de incluir ntddk.h.
Si desea configurar las rutinas de tabla genéricas, Rtl... GenericTable, 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`
Los autores de llamadas de RtlInitializeGenericTableAvl deben ejecutarse en IRQL <= DISPATCH_LEVEL. Tenga en cuenta que si Rtl... Las rutinas de GenericTableAvl se usarán en irQL DISPATCH_LEVEL, la CompareRoutine, AllocateRoutiney FreeRoutine deben ser código no paginable y el AllocateRoutine debe asignar memoria del grupo no paginado.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
encabezado de | ntddk.h (incluya Ntddk.h, Ntifs.h, Fltkernel.h) |
biblioteca de | NtosKrnl.lib |
DLL de | NtosKrnl.exe |
irQL | IRQL <= DISPATCH_LEVEL (consulte la sección Comentarios) |
Consulte también
RtlDeleteElementGenericTableAvl
RtlInsertElementGenericTableAvl