RtlLookupElementGenericTable ルーチンは、指定されたデータに一致する要素をジェネリック テーブルで検索します。
構文
NTSYSAPI PVOID RtlLookupElementGenericTable(
PRTL_GENERIC_TABLE Table,
PVOID Buffer
);
パラメーター
Table
ジェネリック テーブル (RTL_GENERIC_TABLE) へのポインター。 テーブルは、RtlInitializeGenericTable 呼び出すことによって初期化されている必要があります。
Buffer
RtlInitializeGenericTable がジェネリック テーブルを初期化したときに登録された、CompareRoutine に渡す検索データのバッファー。 詳細については、RtlInitializeGenericTable の説明を参照してください。
戻り値
RtlLookupElementGenericTable は、ジェネリック テーブル内の目的の要素に対して呼び出し元から指定されたデータへのポインターを返します。 現在、ジェネリック テーブルに要素がない場合、または一致する要素が見つからない場合は、NULL が返されます。
備考
一致する要素が見つかった場合、RtlLookupElementGenericTable 汎用テーブルの再生ツリーのバランスを再調整します。
Rtl の呼び出し元。.GenericTable ルーチンは、ジェネリック テーブルへのアクセスを排他的に同期する役割を担います。 排他的高速ミューテックスは、この目的で使用する最も効率的な同期メカニズムです。
既定では、オペレーティング システムは splay ツリーを使用して汎用テーブルを実装します。 状況によっては、スプレイ ツリーを操作すると、ツリーが深く狭く、直線に変わる場合もあります。 非常に深いツリーでは、検索のパフォーマンスが低下します。 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 テーブル構造を渡す必要があります。
次のいずれかの条件が満たされている場合、RtlLookupElementGenericTable の呼び出し元が IRQL < DISPATCH_LEVEL で実行されている必要があります。
呼び出し元によって割り当てられたメモリは、Table または Buffer でページング可能です。
呼び出し元が指定した CompareRoutine には、ページング可能なコードが含まれています。
それ以外の場合、RtlLookupElementGenericTable の呼び出し元は、非ページ メモリまたはコードを使用する場合に IRQL <= DISPATCH_LEVELで実行できます。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntddk.h (Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 「解説」セクションを参照してください。 |
関連項目
RtlInitializeGenericTable の
RtlIsGenericTableEmpty を する
RtlNumberGenericTableElements の