Compartilhar via


Função RtlEnumerateGenericTableWithoutSplayingAvl (ntddk.h)

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

Sintaxe

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplayingAvl(
  [in]      PRTL_AVL_TABLE Table,
  [in, out] PVOID          *RestartKey
);

Parâmetros

[in] Table

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

[in, out] RestartKey

Um endereço do elemento retornado pela chamada anterior para RtlEnumerateGenericTableWithoutSplayingAvl. Deve ser definido como NULL se a enumeração for iniciar no primeiro elemento da tabela.

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

RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey);
     ptr != NULL;
     ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey)) {
        // Process the element pointed to by ptr
}

Retornar valor

RtlEnumerateGenericTableWithoutSplayingAvl retorna um ponteiro para a estrutura definida pelo chamador associada ao elemento . Ele retornará NULL se RestartKey for NULL e a tabela não tiver elementos ou se RestartKey for um ponteiro retornado e não houver nenhum próximo elemento.

Comentários

A rotina RtlEnumerateGenericTableWithoutSplayingAvl não funciona realmente com uma árvore de reprodução, mas fornece uma rotina nomeada análoga a RtlEnumerateGenericTableWithoutSplayingAvl.

RtlEnumerateGenericTableWithoutSplayingAvl pode ser chamado repetidamente para processar os dados do chamador em cada elemento de uma tabela genérica.

Por padrão, o sistema operacional usa árvores de reprodução para implementar tabelas genéricas, mas a rotina RtlLookupElementGenericTableFullAvl só funciona com árvores Desvelsky/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 RtlEnumerateGenericTableWithoutSplayingAvl em vez de RtlEnumerateGenericTableWithoutSplaying. Na chamada para RtlEnumerateGenericTableWithoutSplayingAvl, o chamador deve passar uma estrutura de tabela RTL_AVL_TABLE em vez de RTL_GENERIC_TABLE.

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.

Os chamadores de RtlEnumerateGenericTableWithoutSplayingAvl 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)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Consulte a seção Observações.

Confira também

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl