Share via


RtlLookupElementGenericTable 関数 (ntddk.h)

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で実行できます。

要件

要件
対象プラットフォーム ユニバーサル
Header ntddk.h (Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 「解説」を参照してください。

こちらもご覧ください

RTL_AVL_TABLE

RTL_GENERIC_TABLE

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements