Compartilhar via


Função RtlEnumerateGenericTableAvl (ntddk.h)

A rotina RtlEnumerateGenericTableAvl é usada para enumerar os elementos em uma tabela genérica.

Sintaxe

NTSYSAPI PVOID RtlEnumerateGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] BOOLEAN        Restart
);

Parâmetros

[in] Table

Um ponteiro para a tabela genérica (RTL_AVL_TABLE). A tabela deve ter sido inicializada chamando RtlInitializeGenericTableAvl.

[in] Restart

Defina como TRUE se a enumeração for iniciar no primeiro elemento da tabela. Defina como FALSE se retomar a enumeração de uma chamada anterior.

Para enumerar todos os elementos na tabela, use RtlEnumerateGenericTableAvl da seguinte maneira:

for (p = RtlEnumerateGenericTableAvl ( Table, TRUE );
     p != NULL;
     p = RtlEnumerateGenericTableAvl ( Table, FALSE )) {
        // Process the element pointed to by p
}

Retornar valor

RtlEnumerateGenericTableAvl retorna um ponteiro para o próximo elemento, se houver um. Se não houver mais elementos na tabela, RtlEnumerateGenericTableAvl retornará NULL.

Comentários

Chamadores do Rtl. As rotinas GenericTableAvl são responsáveis por sincronizar exclusivamente o acesso à tabela genérica. Um mutex rápido exclusivo é o mecanismo de sincronização mais eficiente a ser usado para essa finalidade.

Por padrão, o sistema operacional usa árvores de reprodução para implementar tabelas genéricas, mas a rotina RtlEnumerateGenericTableAvl só funciona com árvores Adelson-Velsky/Landis (AVL). Para configurar as rotinas de tabela genéricas para usar árvores AVL em vez de árvores de reprodução no driver, insira a seguinte instrução define em um arquivo de cabeçalho comum antes de incluir Ntddk.h:

#define RTL_USE_AVL_TABLES 0

Se RTL_USE_AVL_TABLES não estiver definido, você deverá usar a forma AVL das rotinas de tabela genéricas. Por exemplo, use a rotina RtlEnumerateGenericTableAvl em vez de RtlEnumerateGenericTable. Na chamada para RtlEnumerateGenericTableAvl, o chamador deve passar uma estrutura de tabela RTL_AVL_TABLE em vez de RTL_GENERIC_TABLE.

Os chamadores de RtlEnumerateGenericTableAvl devem estar em execução no IRQL < DISPATCH_LEVEL se a memória alocada pelo chamador para a tabela genérica for paginável.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho ntddk.h (inclua Ntddk.h, Ntifs.h, Fltkernel.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL IRQL < (consulte a seção Comentários)

Confira também

ExInitializeFastMutex

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl