Compartilhar via


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 que euelemento deve 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 no Table é sempre um a menos do que o valor retornado por RtlNumberGenericTableElements.

Valor de retorno

RtlGetElementGenericTable retorna um ponteiro para os dados fornecidos pelo chamador para o elemento Ith na tabela genérica. Ele retornará NULL se o fornecido que eu for muito grande ou se a tabela genérica não tiver elementos no momento.

Observações

RtlGetElementGenericTable retorna o elemento Iinserido na tabela genérica. Para recuperar o primeiro elemento, defina eu como zero. Para recuperar o último elemento, defina i para (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 decremente reduzidos. Portanto, o índice de um elemento pode mudar ao longo do tempo.

rtlGetElementGenericTable é mais eficiente do 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 Desassocupadas/Landis (AVL). Se você quiser configurar as rotinas de tabela genéricas para usar árvores AVL em vez de reproduzir árvores 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 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
da Plataforma de Destino Universal
cabeçalho ntddk.h (inclua Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL Qualquer nível (Consulte Comentários)

Consulte também

rtlDeleteElementGenericTable

RtlEnumerateGenericTableWithoutSplaying

rtlInitializeGenericTable

rtlInsertElementGenericTable

RtlLookupElementGenericTable

RtlNumberGenericTableElements