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
}
Valor de retorno
RtlEnumerateGenericTableWithoutSplayingAvl retorna um ponteiro para a estrutura definida pelo chamador associada ao elemento. Ele retornará NULL se RestartKey estiver NULL e a tabela não tiver elementos ou se RestartKey for um ponteiro retornado e não houver nenhum próximo elemento.
Observações
RtlEnumerateGenericTableWithoutSplayingAvl pode ser chamado repetidamente para processar os dados do chamador em cada elemento de uma tabela genérica.
Os elementos são retornados na ordem retornada, conforme definido pelo parâmetro PRTL_AVL_COMPARE_ROUTINE fornecido para rtlInitializeGenericTableAvl.
Por padrão, o sistema operacional usa árvores de reprodução para implementar tabelas genéricas, mas o RtlLookupElementGenericTableFullAvl rotina só funciona com árvores Desabilitadas/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 de definição 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 de 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 deverão 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 |
---|---|
da Plataforma de Destino | Universal |
cabeçalho | ntddk.h (inclua Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | Consulte a seção Comentários. |