Compartir a través de


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

ExInitializeFastMutex

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableAvl

rtlGetElementGenericTableAvl

RtlInitializeGenericTable

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl