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 Index 값이 KeyHandle로 지정된 레지스트리 키의 범위를 벗어났습니다. 예를 들어 키에 n 하위 키가 있는 경우 n-1보다 큰 값에 대해 루틴은 STATUS_NO_MORE_ENTRIES 반환합니다.

설명

핸들은 KEY_ENUMERATE_SUB_KEYS 액세스 권한으로 열렸어야 합니다. 이 작업은 KEY_ENUMERATE_SUB_KEYS, KEY_READ 또는 KEY_ALL_ACCESS DesiredAccess 매개 변수로 ZwCreateKey 또는 ZwOpenKey 에 전달하여 수행 됩니다.

Index 매개 변수는 단순히 KeyHandle에서 참조하는 키의 하위 키 중에서 선택하는 방법입니다. 동일한 인덱스가 있는 ZwEnumerateKey에 대한 두 번의 호출은 동일한 결과를 반환하도록 보장되지 않습니다.

레지스트리 키 작업에 대한 자세한 내용은 드라이버에서 레지스트리 사용을 참조하세요.

이 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwEnumerateKey" 대신 "NtEnumerateKey"라는 이름을 사용해야 합니다.

커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 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