RtlGetElementGenericTableAvl ルーチンは、特定のジェネリック Adelson-Velsky/Landis (AVL) テーブル要素の呼び出し元から提供されるデータへのポインターを返します。
構文
NTSYSAPI PVOID RtlGetElementGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] ULONG I
);
パラメーター
[in] Table
I番目の要素の取得元となる汎用 AVL テーブル (RTL_AVL_TABLE) へのポインター。 テーブルは、RtlInitializeGenericTableAvl 呼び出すことによって初期化されている必要があります。
[in] I
選択した要素のインデックス。 この値は 0 から始まるため、Table に現在挿入されている最後に挿入された要素のインデックスは、RtlNumberGenericTableElementsAvlによって返される値より常に 1 小さくなります。
戻り値
RtlGetElementGenericTableAvl は、ジェネリック AVL テーブルの 1 番目の要素 の呼び出し元が指定したデータへのポインターを返します。 指定された I が大きすぎる場合、またはジェネリック AVL テーブルに現在要素がない場合は、NULL が返されます。
備考
RtlGetElementGenericTableAvl は、ジェネリック AVL テーブルに挿入された要素 を返します。 最初の要素を取得するには、 ゼロに設定します。 最後の要素を取得するには、 ( RtlNumberGenericTableElementsAvl(Table)-1) に設定します。 ジェネリック テーブルから要素が削除されると、削除された要素の後に挿入されたすべての要素のインデックスがデクリメントされることに注意してください。 したがって、要素のインデックスは時間の経過と同時に変化する可能性があります。
RtlGetElementGenericTableAvl 、呼び出し元が関連付けられたデータへのアクセスを必要とする特定の要素のインデックスを呼び出し元が指定できる場合、RtlLookupElementGenericTableAvl よりも効率的です。 ただし、RtlGetElementGenericTableAvl 繰り返し呼び出してこのような要素をテストすることは、RtlLookupElementGenericTableAvl 呼び出して検索する よりも効率的ではありません。
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 テーブル構造を渡す必要があります。
ジェネリック テーブルの呼び出し元によって割り当てられたメモリがページング可能な場合は、RtlGetElementGenericTableAvl の呼び出し元が IRQL < DISPATCH_LEVEL で実行されている必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntddk.h (Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | 任意のレベル (「解説」を参照) |
関連項目
RtlDeleteElementGenericTableAvl の
RtlEnumerateGenericTableWithoutSplayingAvl を する
RtlInitializeGenericTableAvl の
RtlInsertElementGenericTableAvl を する
RtlLookupElementGenericTableAvl を する
RtlNumberGenericTableElementsAvl の