Função RtlLookupElementGenericTableAvl (ntddk.h)
A rotina RtlLookupElementGenericTableAvl pesquisa uma tabela genérica em busca de um elemento que corresponda aos dados especificados.
Sintaxe
NTSYSAPI PVOID RtlLookupElementGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer
);
Parâmetros
[in] Table
Ponteiro para a tabela Genérica Desassocupada-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 o compareRoutine que foi registrado quando RtlInitializeGenericTableAvl inicializou a tabela genérica. Para obter mais informações, consulte a descrição de RtlInitializeGenericTableAvl.
Valor de retorno
RtlLookupElementGenericTableAvl 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.
Observações
Por padrão, o sistema operacional usa árvores de reprodução para implementar tabelas genéricas, mas o RtlLookupElementGenericTableAvl rotina só funciona com árvores Desabilitadas/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 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 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.
Chamadores do Rtl.. As rotinas de 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 RtlLookupElementGenericTableAvl deverão 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.
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 | < DISPATCH_LEVEL IRQL (consulte a seção Comentários) |