Função RtlGetElementGenericTable (ntddk.h)
A rotina RtlGetElementGenericTable retorna um ponteiro para os dados fornecidos pelo chamador para um elemento de tabela genérico específico.
Sintaxe
NTSYSAPI PVOID RtlGetElementGenericTable(
[in] PRTL_GENERIC_TABLE Table,
[in] ULONG I
);
Parâmetros
[in] Table
Ponteiro para a tabela genérica (RTL_GENERIC_TABLE) da qual o elemento Ideve ser recuperado. A tabela deve ter sido inicializada chamando RtlInitializeGenericTable.
[in] I
Índice do elemento selecionado. Esse valor é baseado em zero, portanto, o índice do último elemento inserido atualmente em Table é sempre um menor que o valor retornado por RtlNumberGenericTableElements.
Retornar valor
RtlGetElementGenericTable retorna um ponteiro para os dados fornecidos pelo chamador para o elemento Ina tabela genérica. Ele retornará NULL se o fornecido eu for muito grande ou se a tabela genérica atualmente não tiver elementos.
Comentários
RtlGetElementGenericTable retorna o elemento Iinserido na tabela genérica. Para recuperar o primeiro elemento, defina I como zero. Para recuperar o último elemento, defina I como (RtlNumberGenericTableElements(Table)-1). Observe que, se um elemento for excluído da tabela genérica, os índices de todos os elementos inseridos após o elemento excluído serão decrementados. Portanto, o índice de um elemento pode mudar ao longo do tempo.
RtlGetElementGenericTable é mais eficiente que RtlLookupElementGenericTable se o chamador puder fornecer o índice de um elemento específico para o qual o chamador precisa de acesso aos dados associados. No entanto, chamar RtlGetElementGenericTable repetidamente para testar esse elemento é menos eficiente do que chamar RtlLookupElementGenericTable para localizá-lo.
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 RtlGetElementGenericTableAvl em vez de RtlGetElementGenericTable. Na chamada para RtlGetElementGenericTableAvl, o chamador deve passar uma estrutura de tabela RTL_AVL_TABLE em vez de RTL_GENERIC_TABLE.
Os chamadores de RtlGetElementGenericTable 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 | Qualquer nível (Consulte Comentários) |