RtlEnumerateGenericTableAvl 関数 (ntddk.h)
RtlEnumerateGenericTableAvl ルーチンは、ジェネリック テーブル内の要素を列挙するために使用されます。
構文
NTSYSAPI PVOID RtlEnumerateGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] BOOLEAN Restart
);
パラメーター
[in] Table
ジェネリック テーブルへのポインター (RTL_AVL_TABLE)。 テーブルは RtlInitializeGenericTableAvl を呼び出して初期化されている必要があります。
[in] Restart
列挙がテーブルの最初の要素から開始する場合は TRUE に設定します。 前の呼び出しから列挙を再開する場合は 、FALSE に 設定します。
テーブル内のすべての要素を列挙するには、次のように RtlEnumerateGenericTableAvl を 使用します。
for (p = RtlEnumerateGenericTableAvl ( Table, TRUE );
p != NULL;
p = RtlEnumerateGenericTableAvl ( Table, FALSE )) {
// Process the element pointed to by p
}
戻り値
RtlEnumerateGenericTableAvl は、次の要素へのポインター (存在する場合) を返します。 テーブルにそれ以上の要素がない場合、 RtlEnumerateGenericTableAvl は NULL を返します。
注釈
Rtl の呼び出し元 ..GenericTableAvl ルーチンは、ジェネリック テーブルへのアクセスを排他的に同期する役割を担います。 排他高速ミューテックスは、この目的で使用する最も効率的な同期メカニズムです。
既定では、オペレーティング システムは splay ツリーを使用して汎用テーブルを実装しますが、 RtlEnumerateGenericTableAvl ルーチンは Adelson-Velsky/Landis (AVL) ツリーでのみ機能します。 ドライバーでツリーを再生する代わりに AVL ツリーを使用するように汎用テーブル ルーチンを構成するには、 Ntddk.h を含める前に、共通ヘッダー ファイルに次の define ステートメントを挿入します。
#define RTL_USE_AVL_TABLES 0
RTL_USE_AVL_TABLESが定義されていない場合は、汎用テーブル ルーチンの AVL 形式を使用する必要があります。 たとえば、 RtlEnumerateGenericTable の代わりに RtlEnumerateGenericTableAvl ルーチンを使用します。 RtlEnumerateGenericTableAvl の呼び出しでは、呼び出し元はRTL_GENERIC_TABLEではなくRTL_AVL_TABLEテーブル構造を渡す必要があります。
汎用テーブルの呼び出し元割り当てメモリがページング可能な場合は、 RtlEnumerateGenericTableAvl の呼び出し元が IRQL < DISPATCH_LEVELで実行されている必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ntddk.h (Ntddk.h、Ntifs.h、Fltkernel.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | IRQL < DISPATCH_LEVEL (「解説」セクションを参照) |