Registry-Key 개체에 대한 핸들 열기
레지스트리 키 개체에 대한 핸들을 열려면 다음 2단계 프로세스를 수행합니다.
OBJECT_ATTRIBUTES 구조를 만들고 InitializeObjectAttributes를 호출하여 초기화합니다. 조작할 키의 이름을 InitializeObjectAttributes에 대한 ObjectName 매개 변수로 지정합니다.
InitializeObjectAttributes에 RootDirectory 매개 변수로 NULL을 전달하는 경우 ObjectName은 \Registry부터 레지스트리 키의 전체 경로여야 합니다. 그렇지 않으면 RootDirectory 는 키에 대한 열린 핸들이어야 하며 ObjectName 은 해당 키를 기준으로 하는 경로입니다.
ZwCreateKey 또는 ZwOpenKey를 호출하여 키 개체에 대한 핸들을 열고 OBJECT_ATTRIBUTES 구조를 전달합니다. 키가 아직 없는 경우 ZwCreateKey 는 키를 만드는 반면 ZwOpenKey 는 STATUS_OBJECT_NAME_NOT_FOUND 반환합니다.
DesiredAccess 매개 변수를 요청하는 액세스 권한이 포함된 ZwCreateKey 또는 ZwOpenKey에 전달합니다. 드라이버가 수행할 작업을 허용하는 액세스 권한을 지정해야 합니다. 다음 표에서는 수행할 수 있는 작업과 요청할 해당 액세스 권한을 나열합니다.
작업 | 필요한 액세스 권한 |
---|---|
레지스트리 키 값을 가져옵니다. |
KEY_QUERY_VALUE 또는 KEY_READ |
레지스트리 키 값을 설정합니다. |
KEY_SET_VALUE 또는 KEY_WRITE |
키의 모든 하위 키를 반복합니다. |
KEY_ENUMERATE_SUB_KEYS 또는 KEY_READ |
하위 키를 만듭니다. |
KEY_CREATE_SUB_KEY 또는 KEY_WRITE |
키를 삭제합니다. |
DELETE |
DesiredAccess 매개 변수에 사용할 수 있는 값에 대한 자세한 내용은 ZwCreateKey를 참조하세요.
IoOpenDeviceRegistryKey 및 IoOpenDeviceInterfaceRegistryKey를 호출하여 디바이스별 및 디바이스 인터페이스별 레지스트리 키에 대한 핸들을 각각 열 수도 있습니다. 자세한 내용은 플러그 앤 플레이 레지스트리 루틴을 참조하세요.
참고ZwCreateKey, ZwOpenKey, IoOpenDeviceRegistryKey 및 IoOpenDeviceInterfaceRegistryKey에 대한 호출의 경우 제네릭 액세스 권한인 GENERIC_READ 및 GENERIC_WRITE 각각 키별 액세스 권한, KEY_READ 및 KEY_WRITE 의미하며 이러한 키별 액세스 권한 대신 사용할 수 있습니다.