RtlLookupElementGenericTableFullAvl 関数 (ntddk.h)
RtlLookupElementGenericTableFullAvl ルーチンは、指定されたデータに一致する要素をジェネリック テーブルで検索します。
構文
NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer,
[out] PVOID *NodeOrParent,
[out] TABLE_SEARCH_RESULT *SearchResult
);
パラメーター
[in] Table
汎用の Adelson-Velsky/Landis (AVL) テーブルへのポインター (RTL_AVL_TABLE)。 テーブルは RtlInitializeGenericTableAvl を呼び出して初期化されている必要があります。
[in] Buffer
RtlInitializeGenericTableAvl がジェネリック テーブルを初期化したときに登録された CompareRoutine に渡す検索データのバッファー。 詳細については、 RtlInitializeGenericTableAvl の説明を参照してください。
[out] NodeOrParent
出力時に、 NodeOrParent と RtlLookupElementGenericTableFullAvl が検索しているテーブル エントリ (ノード) の関係を記述する値。 SearchResult パラメーターには、次のいずれかの値を指定できます。
TableEmptyTree
ツリーが空でした。 NodeOrParent の内容は変更されていません。
TableFoundNode
RtlLookupElementGenericTableFullAvl ルーチンで、Buffer 内のデータとキーが一致するテーブル エントリが見つかりました。 NodeOrParent には、一致したエントリへのポインターが含まれています。
TableInsertAsLeft
RtlLookupElementGenericTableFullAvl ルーチンで、Buffer 内のデータと一致するキーを持つテーブル エントリが見つかりませんでした。 RtlLookupElementGenericTableFullAvl が検索したエントリがテーブル内にあったのではなく、NodeOrParent が指すエントリの左側の子になります。
TableInsertAsRight
RtlLookupElementGenericTableFullAvl ルーチンで、Buffer 内のデータと一致するキーを持つテーブル エントリが見つかりませんでした。 RtlLookupElementGenericTableFullAvl が検索したエントリがテーブル内にある場合は、NodeOrParent が指すエントリの適切な子になります。
[out] SearchResult
テーブル エントリへのポインター。 RtlLookupElementGenericTableFullAvl ルーチンがエントリと一致する場合、NodeOrParent は一致したエントリを指します。 RtlLookupElementGenericTableFullAvl ルーチンで一致するものが見つからない場合、NodeOrParent は RtlLookupElementGenericTableFullAvl ルーチンが検索していたエントリの親となるエントリを指します。
戻り値
RtlLookupElementGenericTableFullAvl は、ジェネリック テーブル内の一致する要素に関連付けられているユーザー データへのポインターを返します。ジェネリック テーブルに現在要素がない場合、または一致する要素が見つからない場合は NULL を 返します。
注釈
既定では、オペレーティング システムは splay ツリーを使用して汎用テーブルを実装しますが、 RtlLookupElementGenericTableFullAvl ルーチンは Adelson-Velsky/Landis (AVL) ツリーでのみ機能します。 ドライバーでツリーを再生する代わりに AVL ツリーを使用するように汎用テーブル ルーチンを構成するには、 Ntddk.h を含める前に、共通ヘッダー ファイルに次の define ステートメントを挿入します。
#define RTL_USE_AVL_TABLES 0
RTL_USE_AVL_TABLESが定義されていない場合は、汎用テーブル ルーチンの AVL 形式を使用する必要があります。 たとえば、 RtlLookupElementGenericTable の代わりに RtlLookupElementGenericTableFullAvl ルーチンを使用 します。 RtlLookupElementGenericTableFullAvl の呼び出しでは、呼び出し元はRTL_GENERIC_TABLEではなくRTL_AVL_TABLEテーブル構造を渡す必要があります。
Rtl の呼び出し元 ..GenericTableAvl ルーチンは、ジェネリック テーブルへのアクセスを排他的に同期する役割を担います。 排他高速ミューテックスは、この目的で使用する最も効率的な同期メカニズムです。
次のいずれかの条件が満たされている場合、 RtlLookupElementGenericTableFullAvl の呼び出し元は IRQL < DISPATCH_LEVELで実行されている必要があります。
- 呼び出し元によって割り当てられたメモリ ( Table または Buffer) はページング可能です。
- 呼び出し元から提供された CompareRoutine には、ページング可能なコードが含まれています。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | ntddk.h (Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL (「解説」セクションを参照) |