Compartilhar via


Função RtlLookupElementGenericTableFullAvl (ntddk.h)

A rotina RtlLookupElementGenericTableFullAvl pesquisa uma tabela genérica em busca de um elemento que corresponda aos dados especificados.

Sintaxe

NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
  [in]  PRTL_AVL_TABLE      Table,
  [in]  PVOID               Buffer,
  [out] PVOID               *NodeOrParent,
  [out] TABLE_SEARCH_RESULT *SearchResult
);

Parâmetros

[in] Table

Ponteiro para a tabela genérica Adelson-Velsky/Landis (AVL) (RTL_AVL_TABLE). A tabela deve ter sido inicializada chamando RtlInitializeGenericTableAvl.

[in] Buffer

Um buffer de dados de pesquisa a ser passado para a CompareRoutine que foi registrada quando RtlInitializeGenericTableAvl inicializou a tabela genérica. Para obter mais informações, consulte a descrição de RtlInitializeGenericTableAvl.

[out] NodeOrParent

Na saída, um valor que descreve a relação do NodeOrParent com a entrada de tabela (nó) que RtlLookupElementGenericTableFullAvl está procurando. O parâmetro SearchResult pode ter qualquer um dos seguintes valores:

TableEmptyTree

A árvore estava vazia. O conteúdo de NodeOrParentnão foi alterado.

TableFoundNode

A rotina RtlLookupElementGenericTableFullAvl encontrou uma entrada de tabela cuja chave corresponde aos dados no Buffer. NodeOrParent contém um ponteiro para a entrada correspondente.

TableInsertAsLeft

A rotina RtlLookupElementGenericTableFullAvlnãoencontrou uma entrada de tabela cuja chave corresponde aos dados no Buffer. Eu nãof a entrada que RtlLookupElementGenericTableFullAvl pesquisou estavam na tabela, seria o filho esquerdo da entrada para a qual NodeOrParent aponta.

TableInsertAsRight

A rotina RtlLookupElementGenericTableFullAvlnãoencontrou uma entrada de tabela cuja chave corresponde aos dados no Buffer. Se a entrada que RtlLookupElementGenericTableFullAvl pesquisou estivesse na tabela, ela seria o filho certo da entrada para a qual NodeOrParent aponta.

[out] SearchResult

Um ponteiro para uma entrada de tabela. Se a rotina RtlLookupElementGenericTableFullAvl corresponder a uma entrada, NodeOrParentapontará para a entrada correspondente. Se a rotina RtlLookupElementGenericTableFullAvl não encontrar uma correspondência, NodeOrParent apontará para a entrada que seria o pai da entrada que a rotina RtlLookupElementGenericTableFullAvl estava procurando.

Retornar valor

RtlLookupElementGenericTableFullAvl retorna um ponteiro para os dados do usuário associados ao elemento correspondente na tabela genérica ou NULL se a tabela genérica atualmente não tiver elementos ou se nenhum elemento correspondente for encontrado.

Comentários

Por padrão, o sistema operacional usa árvores de reprodução para implementar tabelas genéricas, mas a rotina RtlLookupElementGenericTableFullAvl só funciona com árvores Adelson-Velsky/Landis (AVL). Para 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 RtlLookupElementGenericTableFullAvl em vez de RtlLookupElementGenericTable. Na chamada para RtlLookupElementGenericTableFullAvl, o chamador deve passar uma estrutura de tabela RTL_AVL_TABLE em vez de RTL_GENERIC_TABLE.

Chamadores do Rtl. As rotinas GenericTableAvl 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.

Os chamadores de RtlLookupElementGenericTableFullAvl devem estar em execução no IRQL < DISPATCH_LEVEL se uma das seguintes condições se mantiver:

  • A memória alocada pelo chamador na Tabela ou no Buffer é paginável.
  • A CompareRoutine fornecida pelo chamador contém código paginável.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows XP.
Plataforma de Destino Universal
Cabeçalho ntddk.h (inclua Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL (consulte a seção Comentários)

Confira também

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl