Compartilhar via


Função RtlLookupElementGenericTable (ntddk.h)

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

Sintaxe

NTSYSAPI PVOID RtlLookupElementGenericTable(
  PRTL_GENERIC_TABLE Table,
  PVOID              Buffer
);

Parâmetros

Table

Ponteiro para a tabela genérica (RTL_GENERIC_TABLE). A tabela deve ter sido inicializada chamando RtlInitializeGenericTable.

Buffer

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

Valor de retorno

RtlLookupElementGenericTable retorna um ponteiro para os dados fornecidos pelo chamador para o elemento desejado na tabela genérica. Ele retorna NULL se a tabela genérica atualmente não tiver elementos ou se nenhum elemento correspondente for encontrado.

Observações

Se um elemento correspondente for encontrado, RtlLookupElementGenericTable balancear novamente a árvore de reprodução da tabela genérica.

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 você não definir RTL_USE_AVL_TABLES conforme especificado acima, deverá usar a forma AVL das rotinas de tabela genéricas. Por exemplo, use a rotina de RtlLookupElementGenericTableAvl em vez de RtlLookupElementGenericTable. Na chamada para RtlLookupElementGenericTableAvl, o chamador deve passar uma estrutura de tabela RTL_AVL_TABLE em vez de RTL_GENERIC_TABLE.

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

  • A memória alocada pelo chamador em de Tabela ou no do Buffer é paginável.

  • O CompareRoutine fornecido pelo chamador contém código paginável.

Caso contrário, os chamadores de rtlLookupElementGenericTable podem ser executados em IRQL <= DISPATCH_LEVEL ao usar memória ou código não paginado.

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 Consulte a seção Comentários.

Consulte também

RTL_AVL_TABLE

RTL_GENERIC_TABLE

rtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements