Função RtlEnumerateGenericTable (ntddk.h)
A rotina RtlEnumerateGenericTable é usada para enumerar os elementos em uma tabela genérica.
Sintaxe
NTSYSAPI PVOID RtlEnumerateGenericTable(
[in] PRTL_GENERIC_TABLE Table,
[in] BOOLEAN Restart
);
Parâmetros
[in] Table
Um ponteiro para a tabela genérica (RTL_GENERIC_TABLE). A tabela deve ter sido inicializada chamando RtlInitializeGenericTable.
[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 RtlEnumerateGenericTable da seguinte maneira:
for (p = RtlEnumerateGenericTable ( Table, TRUE );
p != NULL;
p = RtlEnumerateGenericTable ( Table, FALSE )) {
// Process the element pointed to by p
}
Retornar valor
RtlEnumerateGenericTable retorna um ponteiro para o próximo elemento, se houver um. Se não houver mais elementos na tabela, RtlEnumerateGenericTable retornará NULL.
Comentários
RtlEnumerateGenericTable nivela a tabela genérica convertendo-a de uma árvore de reprodução em uma lista vinculada classificada. Para enumerar a tabela sem nivelá-la, use RtlEnumerateGenericTableWithoutSplaying.
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 Adelson-Velsky/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 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 RtlEnumerateGenericTable 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) |