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 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)

Confira também

RtlDeleteElementGenericTable

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlInsertElementGenericTable

RtlLookupElementGenericTable

RtlNumberGenericTableElements