次の方法で共有


RtlLookupElementGenericTableAvl 関数 (ntddk.h)

RtlLookupElementGenericTableAvl ルーチンは、指定されたデータに一致する要素をジェネリック テーブルで検索します。

構文

NTSYSAPI PVOID RtlLookupElementGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] PVOID          Buffer
);

パラメーター

[in] Table

汎用 Adelson-Velsky/Landis (AVL) テーブル (RTL_AVL_TABLE) へのポインター。 テーブルは、RtlInitializeGenericTableAvl 呼び出すことによって初期化されている必要があります。

[in] Buffer

RtlInitializeGenericTableAvl がジェネリック テーブルを初期化したときに登録された、CompareRoutine に渡す検索データのバッファー。 詳細については、RtlInitializeGenericTableAvl の説明を参照してください。

戻り値

RtlLookupElementGenericTableAvl は、ジェネリック テーブル内の一致する要素に関連付けられているユーザー データへのポインターを返 すか、ジェネリック テーブルに現在要素がない場合、または一致する要素が見つからない場合は NULL を返します。

備考

既定では、オペレーティング システムは splay ツリーを使用して汎用テーブルを実装しますが、RtlLookupElementGenericTableAvl ルーチンは、Adelson-Velsky/Landis (AVL) ツリーでのみ機能します。 ドライバーでツリーを再生する代わりに AVL ツリーを使用するように汎用テーブル ルーチンを構成するには、Ntddk.h を含める前に、共通のヘッダー ファイルに次の define ステートメント挿入します。

#define RTL_USE_AVL_TABLES 0

RTL_USE_AVL_TABLESが定義されていない場合は、汎用表ルーチンの AVL 形式を使用する必要があります。 たとえば、RtlLookupElementGenericTable ではなく、RtlLookupElementGenericTableAvl ルーチン使用します。 RtlLookupElementGenericTableAvl する呼び出しでは、呼び出し元は RTL_GENERIC_TABLEではなく、RTL_AVL_TABLE テーブル構造を渡す必要があります。

Rtl の呼び出し元。.GenericTableAvl ルーチンは、ジェネリック テーブルへのアクセスを排他的に同期する役割を担います。 排他的高速ミューテックスは、この目的で使用する最も効率的な同期メカニズムです。

次のいずれかの条件が満たされている場合、RtlLookupElementGenericTableAvl の呼び出し元は IRQL < DISPATCH_LEVEL で実行されている必要があります。

  • 呼び出し元によって割り当てられたメモリは、Table または Buffer でページング可能です。

  • 呼び出し元が指定した CompareRoutine には、ページング可能なコードが含まれています。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー ntddk.h (Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL < DISPATCH_LEVEL (「解説」セクションを参照)

関連項目

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl する

RtlNumberGenericTableElementsAvl