次の方法で共有


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

出力時に、 NodeOrParentRtlLookupElementGenericTableFullAvl が検索しているテーブル エントリ (ノード) の関係を記述する値。 SearchResult パラメーターには、次のいずれかの値を指定できます。

TableEmptyTree

ツリーが空でした。 NodeOrParent の内容は変更されていません

TableFoundNode

RtlLookupElementGenericTableFullAvl ルーチンで、Buffer 内のデータとキーが一致するテーブル エントリが見つかりました。 NodeOrParent には、一致したエントリへのポインターが含まれています。

TableInsertAsLeft

RtlLookupElementGenericTableFullAvl ルーチンで、Buffer 内のデータと一致するキーを持つテーブル エントリが見つかりませんでしたRtlLookupElementGenericTableFullAvl が検索したエントリがテーブル内にあったのではなくNodeOrParent が指すエントリの左側の子になります。

TableInsertAsRight

RtlLookupElementGenericTableFullAvl ルーチンで、Buffer 内のデータと一致するキーを持つテーブル エントリが見つかりませんでしたRtlLookupElementGenericTableFullAvl が検索したエントリがテーブル内にある場合は、NodeOrParent が指すエントリの適切な子になります。

[out] SearchResult

テーブル エントリへのポインター。 RtlLookupElementGenericTableFullAvl ルーチンがエントリと一致する場合、NodeOrParent は一致したエントリを指します。 RtlLookupElementGenericTableFullAvl ルーチンで一致するものが見つからない場合、NodeOrParentRtlLookupElementGenericTableFullAvl ルーチンが検索していたエントリの親となるエントリを指します。

戻り値

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 (「解説」セクションを参照)

こちらもご覧ください

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl