RtlInitializeGenericTableAvl ルーチンは、Adelson-Velsky/Landis (AVL) ツリーを使用して汎用テーブルを初期化します。
構文
NTSYSAPI VOID RtlInitializeGenericTableAvl(
[out] PRTL_AVL_TABLE Table,
[in] PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
[in] PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
[in] PRTL_AVL_FREE_ROUTINE FreeRoutine,
[in, optional] PVOID TableContext
);
パラメーター
[out] Table
初期化された汎用テーブル構造を格納するには、呼び出し元によって割り当てられたバッファーへのポインター。少なくとも sizeof(RTL_AVL_TABLE) バイトである必要があります。
[in] CompareRoutine
比較コールバック ルーチンのエントリ ポイント。次のように宣言されます。
RTL_GENERIC_COMPARE_RESULTS
(*PRTL_AVL_COMPARE_ROUTINE) (
__in struct _RTL_AVL_TABLE *Table,
__in PVOID FirstStruct,
__in PVOID SecondStruct
);
CompareRoutine パラメーター は次のとおりです。
テーブル (CompareRoutine)
ジェネリック テーブルへのポインター。
FirstStruct
比較する最初の項目へのポインター。
SecondStruct
比較する 2 番目の項目へのポインター。
CompareRoutine は、特定の要素を識別できるように、ジェネリック テーブル内のすべての要素の順序を厳密に追跡する必要があります。 要素データの呼び出し元定義構造体には、通常、値が一意であり、並べ替えキーとして使用できるメンバーが含まれます。 すべての Rtl...GenericTableAvl、CompareRoutine を呼び出すルーチンは、バッファー ポインターをパラメーターとして受け取ります。これは、CompareRoutineに順番に渡されます。 バッファーには、CompareRoutine で検索対象の要素のキーと照合する呼び出し元が指定したキー値が含まれています。
このような 2 つのキー値を指定すると、CompareRoutine は GenericLessThan 、GenericGreaterThan、または GenericEqual 返します。
[in] AllocateRoutine
割り当てコールバック ルーチンのエントリ ポイント。次のように宣言されます。
PVOID
(*PRTL_AVL_ALLOCATE_ROUTINE) (
__in struct _RTL_AVL_TABLE *Table,
__in CLONG ByteSize
);
AllocateRoutine パラメーター は次のとおりです。
テーブル (AllocateRoutine)
ジェネリック テーブルへのポインター。
ByteSize
割り当てるバイト数。
新しい要素ごとに、AllocateRoutine が呼び出され、呼び出し元が指定したデータ用のメモリと、Rtl で使用する追加のメモリが割り当てられます。GenericTableAvl ルーチン。 この "追加メモリ" のため、呼び出し元から提供されるルーチンは、ジェネリック テーブル内の要素の最初の sizeof(RTL_BALANCED_LINKS) バイトにアクセスできません。
[in] FreeRoutine
次のように宣言された、割り当て解除コールバック ルーチンのエントリ ポイント。
VOID
(*PRTL_AVL_FREE_ROUTINE) (
__in struct _RTL_AVL_TABLE *Table,
__in PVOID Buffer
);
FreeRoutine パラメーター は次のとおりです。
Table (FreeRoutine)
ジェネリック テーブルへのポインター。
バッファ
削除される要素へのポインター。
Rtl...GenericTableAvl ルーチンは、FreeRoutine を呼び出して、ジェネリック テーブルから削除される要素のメモリの割り当てを解除します。 FreeRoutine は、AllocateRoutineの反対です。
[in, optional] TableContext
ジェネリック テーブルの呼び出し元が指定したコンテキストへの省略可能なポインター。 このパラメーターは NULL できます。
戻り値
何一つ
備考
ファイル システム RtlInitializeGenericTableAvl を呼び出して、現在開いているファイルの名前参照情報などのファイル システム固有のデータを格納する汎用テーブルを初期化します。 要素の並べ替え順序、構造、および内容は呼び出し元によって定義されます。
ファイル システム RtlInitializeGenericTableAvl を呼び出して、他の Rtl.. を使用する前に、汎用テーブルを初期化する必要があります。GenericTableAvl 新しいジェネリック テーブルのルーチンです。 初期化されたジェネリック テーブル構造は不透明と見なす必要があります。
Rtl の呼び出し元...GenericTableAvl ルーチンは、ジェネリック テーブルへのアクセスを排他的に同期する役割を担います。 排他的高速ミューテックスは、この目的で使用する最も効率的な同期メカニズムです。
呼び出し元が指定した CompareRoutine は、新しい要素を挿入する適切な場所を見つけるために、AllocateRoutine の前に呼び出されます。 CompareRoutine は、削除する要素を見つけるために、FreeRoutine の前に呼び出されます。
RtlInitializeGenericTableAvl ルーチンは、AVL ツリーを使用する汎用テーブルを明示的に割り当てます。 このルーチンとその他の Rtl の使用 ...AVL ツリー ベースのテーブルが必要であり、 Ntddk.h を含める前にRTL_USE_AVL_TABLESが定義されていない場合は、GenericTableAvl ルーチンが必要です。
RtlInitializeGenericTableAvl の呼び出し元 IRQL <= DISPATCH_LEVELで実行されている必要があります。 Rtl... 場合は注意してください。GenericTableAvl ルーチンは、IRQL DISPATCH_LEVEL、CompareRoutine、AllocateRoutine、および FreeRoutine で使用され、AllocateRoutine は非ページ プールからメモリを割り当てる必要があります。
必要条件
| 要件 | 価値 |
|---|---|
| ターゲット プラットフォーム の | 万国 |
| ヘッダー | ntddk.h (Ntddk.h、Ntifs.h、Fltkernel.h を含む) |
| ライブラリ | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | IRQL <= DISPATCH_LEVEL (「解説」セクションを参照) |
関連項目
ExInitializeFastMutex の
RtlDeleteElementGenericTableAvl の
RtlEnumerateGenericTableAvl を する
RtlGetElementGenericTableAvl の
RtlInitializeGenericTable の
RtlInsertElementGenericTableAvl を する
RtlLookupElementGenericTableAvl を する
RtlNumberGenericTableElementsAvl の