次の方法で共有


RtlLookupFirstMatchingElementGenericTableAvl 関数 (ntddk.h)

RtlLookupFirstMatchingElementGenericTableAvl ルーチンは、指定されたデータと一致するツリー内の左端の要素を検索します。

構文

NTSYSAPI PVOID RtlLookupFirstMatchingElementGenericTableAvl(
  [in]  PRTL_AVL_TABLE Table,
  [in]  PVOID          Buffer,
  [out] PVOID          *RestartKey
);

パラメーター

[in] Table

汎用 Adelson-Velsky/Landis (AVL) テーブル (RTL_AVL_TABLE) へのポインター。

[in] Buffer

検索データを格納するバッファー。

[out] RestartKey

出力時には、列挙ルーチンで使用する検索コンテキスト ( RtlEnumerateGenericTableWithoutSplayingAvl など) が含まれます。

戻り値

RtlLookupFirstMatchingElementGenericTableAvlルーチンは、一致するデータへのポインターを返します。一致するものが見つからなかった場合は NULL を返します。

注釈

汎用テーブルを実装するツリーには、大文字と小文字のみが異なる複数のファイル名が含まれている場合があります。 検索アルゴリズムでは、このルーチンを使用して、大文字と小文字を参照せずに最初の一致を検索し、 RtlEnumerateGenericTableWithoutSplayingAvl などの列挙ルーチンを使用して後続の一致を返すことができます。

既定では、オペレーティング システムは splay ツリーを使用して汎用テーブルを実装しますが、 RtlLookupFirstMatchingElementGenericTableAvlルーチンは Adelson-Velsky/Landis (AVL) ツリーでのみ機能します。 状況によっては、スプレイ ツリーに対する操作によって、ツリーが深く狭く、直線に変わる場合もあります。 非常に深いツリーは、検索のパフォーマンスを低下させます。 Adelson-Velsky/Landis (AVL) ツリーを使用して、ジェネリック テーブルのよりバランスの取れた浅いツリー実装を確保できます。 ドライバーでツリーを表示する代わりに AVL ツリーを使用するように汎用テーブル ルーチンを構成する場合は、 Ntddk.h を含める前に、共通ヘッダー ファイルに次の define ステートメントを挿入します。

#define RTL_USE_AVL_TABLES 0

RTL_USE_AVL_TABLESが定義されていない場合は、汎用表ルーチンの AVL 形式を使用する必要があります。

次のいずれかの条件が保持されている場合、 RtlLookupFirstMatchingElementGenericTableAvl の呼び出し元は= APC_LEVELで <実行されている必要があります。

  • Table または Buffer の呼び出し元によって割り当てられたメモリはページング可能です。
  • 呼び出し元から提供される CompareRoutine には、ページング可能なコードが含まれています。

要件

要件
サポートされている最小のクライアント Windows Vista 以降で使用できます。
対象プラットフォーム ユニバーサル
Header ntddk.h (FltKernel.h、Ntifs.h、Ntddk.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL (「解説」セクションを参照)

こちらもご覧ください

RtlEnumerateGenericTableWithoutSplayingAvl