次の方法で共有


RtlEnumerateGenericTableWithoutSplayingAvl 関数 (ntddk.h)

RtlEnumerateGenericTableWithoutSplayingAvl ルーチンを使用して、ジェネリック テーブル内の要素を列挙します。

構文

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplayingAvl(
  [in]      PRTL_AVL_TABLE Table,
  [in, out] PVOID          *RestartKey
);

パラメーター

[in] Table

ジェネリック テーブルへのポインター (RTL_AVL_TABLE)。 テーブルは 、RtlInitializeGenericTableAvl を呼び出して初期化されている必要があります。

[in, out] RestartKey

RtlEnumerateGenericTableWithoutSplayingAvl の前回の呼び出しによって返された要素のアドレス。 列挙がテーブルの最初の要素から開始する場合は 、NULL に設定する必要があります。

テーブル内のすべての要素を列挙するには、 次のように RtlEnumerateGenericTableWithoutSplayingAvl を 使用します。

RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey);
     ptr != NULL;
     ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey)) {
        // Process the element pointed to by ptr
}

戻り値

RtlEnumerateGenericTableWithoutSplayingAvl は、 要素に関連付けられている呼び出し元定義構造体へのポインターを返します。 RestartKeyNULL で、テーブルに要素がない場合、または RestartKey が返されるポインターであり、次の要素がない場合は NULL を返します。

注釈

RtlEnumerateGenericTableWithoutSplayingAvl ルーチンは、実際には splay ツリーでは機能しませんが、RtlEnumerateGenericTableWithoutSplayingAvl に類似した名前付きルーチンを提供します。

RtlEnumerateGenericTableWithoutSplayingAvl を繰り返し呼び出して、ジェネリック テーブルの各要素で呼び出し元のデータを処理できます。

既定では、オペレーティング システムは splay ツリーを使用して汎用テーブルを実装しますが、 RtlLookupElementGenericTableFullAvl ルーチンは Adelson-Velsky/Landis (AVL) ツリーでのみ機能します。 ドライバーでツリーを表示する代わりに AVL ツリーを使用するように汎用テーブル ルーチンを構成するには、 Ntddk.h を含める前に、共通ヘッダー ファイルに次の define ステートメントを挿入します。

#define RTL_USE_AVL_TABLES 0

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

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

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

要件

要件
対象プラットフォーム ユニバーサル
Header ntddk.h (Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL 「解説」を参照してください。

こちらもご覧ください

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl