次の方法で共有


RtlGetElementGenericTable 関数 (ntddk.h)

RtlGetElementGenericTable ルーチンは、特定のジェネリック テーブル要素の呼び出し元から提供されたデータへのポインターを返します。

構文

NTSYSAPI PVOID RtlGetElementGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] ULONG              I
);

パラメーター

[in] Table

Iの要素の取得元となる汎用テーブル (RTL_GENERIC_TABLE) へのポインター。 テーブルは、RtlInitializeGenericTable 呼び出すことによって初期化されている必要があります。

[in] I

選択した要素のインデックス。 この値は 0 から始まるため、現在 Table に挿入されている最後に挿入された要素のインデックスは、RtlNumberGenericTableElementsによって返される値より常に 1 小さくなります。

戻り値

RtlGetElementGenericTable は、ジェネリック テーブルの 1 番目の要素 の呼び出し元が指定したデータへのポインターを返します。 指定 が大きすぎる場合、またはジェネリック テーブルに現在要素がない場合は、null が返されます。

備考

RtlGetElementGenericTable は、ジェネリック テーブルに挿入された要素 を返します。 最初の要素を取得するには、 ゼロに設定します。 最後の要素を取得するには、 ( RtlNumberGenericTableElements(Table)-1) に設定します。 ジェネリック テーブルから要素が削除されると、削除された要素の後に挿入されたすべての要素のインデックスがデクリメントされることに注意してください。 したがって、要素のインデックスは時間の経過と同時に変化する可能性があります。

RtlGetElementGenericTable 、呼び出し元が関連付けられたデータにアクセスする必要がある特定の要素のインデックスを呼び出し元が指定できる場合、RtlLookupElementGenericTable よりも効率的です。 ただし、RtlGetElementGenericTable を繰り返し呼び出してこのような要素をテストする は、RtlLookupElementGenericTable 呼び出して検索するよりも効率的ではありません。

Rtl の呼び出し元。.GenericTable ルーチンは、ジェネリック テーブルへのアクセスを排他的に同期する役割を担います。 排他的高速ミューテックスは、この目的で使用する最も効率的な同期メカニズムです。

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

#define RTL_USE_AVL_TABLES 0

RTL_USE_AVL_TABLESが定義されていない場合は、汎用表ルーチンの AVL 形式を使用する必要があります。 たとえば、RtlGetElementGenericTable ではなく、RtlGetElementGenericTableAvl ルーチン使用します。 RtlGetElementGenericTableAvl する呼び出しでは、呼び出し元は RTL_GENERIC_TABLEではなく、RTL_AVL_TABLE テーブル構造を渡す必要があります。

ジェネリック テーブルの呼び出し元によって割り当てられたメモリがページング可能な場合は、RtlGetElementGenericTable の呼び出し元が IRQL < DISPATCH_LEVEL で実行されている必要があります。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー ntddk.h (Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任意のレベル (「解説」を参照)

関連項目

RtlDeleteElementGenericTable

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlInsertElementGenericTable する

RtlLookupElementGenericTable

RtlNumberGenericTableElements