Compartilhar via


Função RtlLookupFirstMatchingElementGenericTableAvl (ntddk.h)

A rotina RtlLookupFirstMatchingElementGenericTableAvl localiza o elemento mais à esquerda na árvore que corresponde aos dados indicados.

Sintaxe

NTSYSAPI PVOID RtlLookupFirstMatchingElementGenericTableAvl(
  [in]  PRTL_AVL_TABLE Table,
  [in]  PVOID          Buffer,
  [out] PVOID          *RestartKey
);

Parâmetros

[in] Table

Um ponteiro para a tabela Genérica Desassocupada-Velsky/Landis (AVL) (RTL_AVL_TABLE).

[in] Buffer

Um buffer que contém os dados de pesquisa.

[out] RestartKey

Na saída, contém um contexto de pesquisa a ser usado com uma rotina de enumeração, como RtlEnumerateGenericTableWithoutSplayingAvl.

Valor de retorno

A rotina RtlLookupFirstMatchingElementGenericTableAvlretorna um ponteiro para os dados correspondentes ou NULL se nenhuma correspondência foi encontrada.

Observações

Uma árvore que implementa uma tabela genérica pode conter vários nomes de arquivo que diferem apenas no caso. Um algoritmo de pesquisa pode usar essa rotina para localizar a primeira correspondência, sem referência ao caso, e usar uma rotina de enumeração, como RtlEnumerateGenericTableWithoutSplayingAvl, para retornar cada correspondência subsequente.

Por padrão, o sistema operacional usa árvores de reprodução para implementar tabelas genéricas, mas o RtlLookupFirstMatchingElementGenericTableAvlrotina funciona apenas com árvores Desabilitadas/Landis (AVL). 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.

Os chamadores de RtlLookupFirstMatchingElementGenericTableAvl devem estar em execução em <= APC_LEVEL se uma das seguintes condições se mantiver:

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows Vista.
da Plataforma de Destino Universal
cabeçalho ntddk.h (inclua FltKernel.h, Ntifs.h, Ntddk.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= APC_LEVEL (consulte a seção Comentários)

Consulte também

RtlEnumerateGenericTableWithoutSplayingAvl