ZwEnumerateKey 関数 (wdm.h)

ZwEnumerateKey ルーチンは、開いているレジストリ キーのサブキーに関する情報を返します。

構文

NTSYSAPI NTSTATUS ZwEnumerateKey(
  [in]            HANDLE                KeyHandle,
  [in]            ULONG                 Index,
  [in]            KEY_INFORMATION_CLASS KeyInformationClass,
  [out, optional] PVOID                 KeyInformation,
  [in]            ULONG                 Length,
  [out]           PULONG                ResultLength
);

パラメーター

[in] KeyHandle

列挙するサブキーを含むレジストリ キーを処理します。 ハンドルは、 ZwCreateKey または ZwOpenKey の正常な呼び出しによって作成 されます

[in] Index

情報を取得するサブキーのインデックス。 キーに n 個 のサブキーがある場合、サブキーの番号は 0 から n-1 になります。

[in] KeyInformationClass

KeyInformation バッファーで受信する情報の種類を決定するKEY_INFORMATION_CLASS列挙値を指定します。 KeyInformationClass を次のいずれかの値に設定します。

  • KeyBasicInformation

  • KeyFullInformation

  • KeyNodeInformation

このリストにない値が指定されている場合、ルーチンはエラー コード STATUS_INVALID_PARAMETERを返します。

[out, optional] KeyInformation

要求された情報を受信する呼び出し元によって割り当てられたバッファーへのポインター。 KeyInformationClass パラメーターは、指定された情報の種類を決定します。

[in] Length

KeyInformation バッファーのサイズをバイト単位で指定します。

[out] ResultLength

レジストリ キー情報のサイズ (バイト単位) を受け取る変数へのポインター。 ZwEnumerateKey がSTATUS_SUCCESSを返す場合は、この変数の値を使用して、返されるデータの量を決定できます。 ルーチンがSTATUS_BUFFER_OVERFLOWまたはSTATUS_BUFFER_TOO_SMALLを返す場合は、この変数の値を使用して、キー情報を保持するために必要なバッファーのサイズを決定できます。

戻り値

ZwEnumerateKey は 、成功した場合はSTATUS_SUCCESS、失敗した場合は適切な NTSTATUS エラー コードを返します。 考えられるエラー コード値は次のとおりです。

リターン コード 説明
STATUS_BUFFER_OVERFLOW 指定されたバッファーが小さすぎて、部分的なデータのみがバッファーに書き込まれた。 *ResultLength は、要求された情報を保持するために必要な最小サイズに設定されます。
STATUS_BUFFER_TOO_SMALL 指定されたバッファーが小さすぎて、バッファーにデータが書き込まれなくなりました。 *ResultLength は、要求された情報を保持するために必要な最小サイズに設定されます。
STATUS_INVALID_PARAMETER KeyInformationClass パラメーターが有効なKEY_INFORMATION_CLASS値ではありません。
STATUS_NO_MORE_ENTRIES KeyHandle で指定されたレジストリ キーのインデックス値が範囲外です。 たとえば、キーに n 個 のサブキーがある場合、 n-1 より大きい値の場合、ルーチンはSTATUS_NO_MORE_ENTRIESを返します。

注釈

ハンドルは、KEY_ENUMERATE_SUB_KEYSアクセスで開かれている必要があります。 これは、 DesiredAccess パラメーターとして KEY_ENUMERATE_SUB_KEYS、KEY_READ、またはKEY_ALL_ACCESSを ZwCreateKey または ZwOpenKey に渡すことによって実現されます。

Index パラメーターは、単に KeyHandle によって参照されるキーのサブキーを選択する方法です。 同じ Index を使用して ZwEnumerateKey を 2 回呼び出しても、同じ結果が返される保証はありません。

レジストリ キーの操作の詳細については、「 ドライバーでのレジストリの使用」を参照してください。

この関数の呼び出しがユーザー モードで発生する場合は、"ZwEnumerateKey" ではなく"NtEnumerateKey" という名前を使用する必要があります。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なります。 ルーチンの NtXxx バージョンと ZwXxx バージョン間の関係の詳細については、「Using Nt and Zw Versions of the Native System Services Routines」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

こちらもご覧ください

KEY_BASIC_INFORMATION

KEY_FULL_INFORMATION

KEY_INFORMATION_CLASS

KEY_NODE_INFORMATION

RtlCheckRegistryKey

RtlCreateRegistryKey

RtlDeleteRegistryValue

RtlQueryRegistryValues

RtlWriteRegistryValue

ZwCreateKey

ZwEnumerateValueKey

ZwOpenKey