WdfRegistryOpenKey 함수(wdfregistry.h)
[KMDF 및 UMDF에 적용]
WdfRegistryOpenKey 메서드는 지정된 레지스트리 키를 열고 레지스트리 키를 나타내는 프레임워크 레지스트리 키 개체를 만듭니다.
구문
NTSTATUS WdfRegistryOpenKey(
[in, optional] WDFKEY ParentKey,
[in] PCUNICODE_STRING KeyName,
[in] ACCESS_MASK DesiredAccess,
[in, optional] PWDF_OBJECT_ATTRIBUTES KeyAttributes,
[out] WDFKEY *Key
);
매개 변수
[in, optional] ParentKey
프레임워크 레지스트리 키 개체에 대한 핸들입니다. 이 개체는 드라이버가 연 부모 레지스트리 키를 나타냅니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 매개 변수가 NULL이 아닌 경우 KeyName 에서 지정하는 키는 레지스트리의 이 부모 키 아래에 있어야 합니다. 이 부모 키에 대한 자세한 내용은 설명 섹션을 참조하세요.
[in] KeyName
열 키의 이름을 포함하는 UNICODE_STRING 구조체에 대한 포인터입니다. 키 이름에는 경로 정보가 포함될 수 있습니다. ParentKey가 NULL인 경우 KeyName은 레지스트리 키에 대한 전체 경로를 지정해야 합니다. 예제는 설명 섹션을 참조하세요.
[in] DesiredAccess
드라이버가 지정된 레지스트리 키에 대해 요청하는 액세스 권한을 지정하는 ACCESS_MASK 형식의 값입니다. 드라이버가 일반적으로 레지스트리 키에 사용하는 액세스 권한 목록은 Registry-Key 개체에 대한 핸들 열기를 참조하세요. 드라이버는 필요한 액세스 유형만 요청해야 합니다. 예를 들어 드라이버는 레지스트리 키만 읽을 경우 KEY_ALL_ACCESS 요청하면 안 됩니다.
[in, optional] KeyAttributes
새 레지스트리 키 개체에 대한 드라이버 제공 특성을 포함하는 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.
[out] Key
새 레지스트리 키 개체에 대한 핸들을 수신하는 위치에 대한 포인터입니다.
반환 값
WdfRegistryOpenKey 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
WdfRegistryOpenKey 는 IRQL = PASSIVE_LEVEL 호출되지 않았습니다. |
|
잘못된 매개 변수가 지정되었습니다. |
|
레지스트리 키 개체를 할당할 수 없습니다. |
|
시스템에서 지정된 액세스 권한을 거부했습니다. |
|
지정된 레지스트리 키가 없습니다. |
WdfRegistryOpenKey 메서드가 반환할 수 있는 다른 반환 값 목록은 프레임워크 개체 만들기 오류를 참조하세요.
이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.
설명
부모 키를 나타내는 레지스트리 키 개체에 대한 핸들을 가져오려면 드라이버가 WdfDriverOpenParametersRegistryKey, WdfDeviceOpenRegistryKey 또는 WdfFdoInitOpenRegistryKey를 호출할 수 있습니다.
KeyName 매개 변수에 지정된 문자열 형식은 호출자가 KMDF 드라이버인지 UMDF 드라이버인지에 따라 달라집니다. 예를 들어 다음 경로를 열려면 다음을 수행합니다.
HKLM\System\CurrentControlSet\Control
드라이버는 다음 조건부 논리를 사용할 수 있습니다.
#ifdef _KERNEL_MODE
#define CONTROL_KEY_FULL_PATH L"\\Registry\\Machine\\System\\CurrentControlSet\\Control "
#else
#define CONTROL_KEY_FULL_PATH L"System\\CurrentControlSet\\Control\\"
#endif
드라이버가 WdfRegistryOpenKey로 열리는 레지스트리 키 사용을 완료하면 드라이버는 WdfRegistryClose를 호출해야 합니다.
레지스트리 키 개체에 대한 자세한 내용은 Framework-Based 드라이버에서 레지스트리 사용을 참조하세요.
예제
다음 코드 예제에서는 드라이버의 소프트웨어 키를 연 다음 드라이버의 소프트웨어 키 아래에 있는 MySubKey 레지스트리 키를 엽니다.
WDFKEY hKey, subkey;
NTSTATUS status;
UNICODE_STRING myKeyStr;
status = WdfDeviceOpenRegistryKey(
device,
PLUGPLAY_REGKEY_DRIVER,
KEY_READ,
WDF_NO_OBJECT_ATTRIBUTES,
&hKey
);
if (NT_SUCCESS(status)){
RtlInitUnicodeString(
&myKeyStr,
L"MySubKey"
);
status = WdfRegistryOpenKey(
hKey,
&myKeyStr,
KEY_READ,
WDF_NO_OBJECT_ATTRIBUTES,
&subkey
);
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
최소 UMDF 버전 | 2.0 |
머리글 | wdfregistry.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF) |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |