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 네이티브 시스템 서비스 루틴의 NtXxx 및 ZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 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) |