Função RtlEnumerateGenericTableWithoutSplaying (ntddk.h)

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

Sintaxe

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplaying(
  [in]      PRTL_GENERIC_TABLE Table,
  [in, out] PVOID              *RestartKey
);

Parâmetros

[in] Table

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

[in, out] RestartKey

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

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

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

Retornar valor

RtlEnumerateGenericTableWithoutSplaying 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

Ao contrário de RtlEnumerateGenericTable, RtlEnumerateGenericTableWithoutSplaying não nivela a tabela genérica convertendo-a de uma árvore de reprodução em uma lista vinculada classificada. RtlEnumerateGenericTableWithoutSplaying é mais eficiente e multiprocessador-safe do que RtlEnumerateGenericTable.

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

Chamadores do Rtl. As rotinas genericTable 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. Em algumas circunstâncias, as operações em uma árvore de reprodução tornarão a árvore profunda e estreita e podem até mesmo transformá-la em uma linha reta. Árvores muito profundas degradam o desempenho das pesquisas. Você pode garantir uma implementação de árvore mais equilibrada e superficial de tabelas genéricas usando árvores Desvelsky/Landis (AVL). Se você quiser 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 RtlEnumerateGenericTableWithoutSplaying em vez de RtlEnumerateGenericTableWithoutSplayingAvl. Na chamada para RtlEnumerateGenericTableWithoutSplayingAvl, o chamador deve passar uma estrutura de tabela RTL_AVL_TABLE em vez de RTL_GENERIC_TABLE.

Os chamadores de RtlEnumerateGenericTableWithoutSplaying 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

RtlEnumerateGenericTable

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements