Compartilhar via


Função RtlGetElementGenericTableAvl (ntddk.h)

A rotina de rtlGetElementGenericTableAvl retorna um ponteiro para os dados fornecidos pelo chamador para um elemento de tabela Específico Desabilitado-Velsky/Landis (AVL).

Sintaxe

NTSYSAPI PVOID RtlGetElementGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] ULONG          I
);

Parâmetros

[in] Table

Ponteiro para a tabela AVL genérica (RTL_AVL_TABLE) da qual o elemento Ideve ser recuperado. A tabela deve ter sido inicializada chamando RtlInitializeGenericTableAvl.

[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 RtlNumberGenericTableElementsAvl.

Valor de retorno

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

Observações

RtlGetElementGenericTableAvl retorna o elemento Iinserido na tabela AVL genérica. Para recuperar o primeiro elemento, defina eu como zero. Para recuperar o último elemento, defina i para (RtlNumberGenericTableElementsAvl(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.

rtlGetElementGenericTableAvl é mais eficiente do que rtlLookupElementGenericTableAvl 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 RtlGetElementGenericTableAvl repetidamente para testar esse elemento é menos eficiente do que chamar RtlLookupElementGenericTableAvl 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 RtlGetElementGenericTableAvl 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
de cliente com suporte mínimo Disponível com o Windows XP.
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

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

rtlInitializeGenericTableAvl

rtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl