次の方法で共有


RtlGetElementGenericTableAvl 関数 (ntddk.h)

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 テーブル内の I番目の要素に対して呼び出し元から提供されたデータへのポインターを返します。 指定された I が大きすぎる場合、またはジェネリック AVL テーブルに現在要素がない場合は、NULL が返されます。

注釈

RtlGetElementGenericTableAvl は、ジェネリック AVL テーブルに挿入された I番目の要素を返します。 最初の要素を取得するには、 I を 0 に設定します。 最後の要素を取得するには、 I を (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 で使用できます。
対象プラットフォーム ユニバーサル
Header ntddk.h (Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 任意のレベル (「解説」を参照)

こちらもご覧ください

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl