다음을 통해 공유


레지스트리 키에 안전하게 액세스

고객 문제는 다음과 같은 타사 디바이스 설치 애플리케이션과 같은 외부 구성 요소로 자주 추적됩니다.

  • 중요한 레지스트리 키를 삭제합니다.

  • 중요한 레지스트리 키의 액세스 권한을 수정합니다.

외부 구성 요소에서 발생하는 많은 문제는 레지스트리 키에 대한 KEY_ALL_ACCESS 액세스 권한을 사용하여 발생합니다. Windows Server 2003부터 SetupDiCreateDevRegKey 는 KEY_READ 및 KEY_WRITE 액세스 권한만 부여하고 KEY_ALL_ACCESS 부여하지 않습니다. Windows Vista부터 추가 KEY_ALL_ACCESS 제한이 적용됩니다.

레지스트리 키에 안전하게 액세스하려면 다음 지침을 따릅니다.

  • SetupAPI, 구성 관리자 함수 및 기타 지원되는 디바이스 관련 API만 사용하여 디바이스 레지스트리 키, 특히 디바이스의 하드웨어 키소프트웨어 키를 엽니다.

    이러한 함수는 액세스 권한 제한으로 인해 발생하는 일반적인 문제를 해결합니다.

  • 레지스트리 키의 위치와 형식은 여러 버전의 Windows 간에 변경될 수 있습니다. 디바이스 및 드라이버 설치에 사용되는 레지스트리 키 또는 값의 위치, 형식 또는 의미에 대해 가정하지 마세요.

    레지스트리 키 및 트리에 대한 자세한 내용은 레지스트리 트리 및 디바이스 및 드라이버용 키를 참조하세요.

  • 레지스트리를 사용하여 디바이스의 내부 설정에 직접 액세스하거나 수정하지 마세요.

  • 다음과 같이 각 작업에 필요한 최소 액세스 권한만 요청합니다.

    • KEY_SET_VALUE

    • KEY_CREATE_SUB_KEY

    • KEY_QUERY_VALUE

    • KEY_ENUMERATE_SUB_KEYS

  • 레지스트리에서 디바이스 설정 클래스 키를 직접 열지 마세요. 모든 레지스트리 키와 마찬가지로 디바이스 설정 클래스 키의 위치와 이름은 Windows 버전 간에 변경될 수 있습니다. 디바이스 설정 클래스 키에 제대로 액세스하는 방법에 대한 자세한 내용은 디바이스 설정 클래스에 대한 레지스트리 키 열기를 참조하세요.

  • 레지스트리에서 디바이스 인터페이스 클래스 키를 직접 열지 마세요. 레지스트리 키와 마찬가지로 디바이스 인터페이스 클래스 키의 위치와 이름은 Windows 버전 간에 변경될 수 있습니다.

    디바이스 인터페이스 클래스 키를 안전하게 열려면 ulFlags 매개 변수에서 CM_OPEN_CLASS_KEY_INTERFACE 설정하는 CM_Open_Class_Key 사용하거나 SetupDiOpenClassRegKeyEx를 사용하고 Flags 매개 변수에서 DIOCR_INSTALLER 설정합니다.

  • INF 지시문만 사용하여 운영 체제에서 사용하도록 예약된 레지스트리 키를 수정합니다. 자세한 내용은 INF 지시문 요약을 참조하세요.

  • 클래스 설치 관리자공동 설치 관리자는 레지스트리 함수를 호출하여 운영 체제에서 사용하도록 예약된 레지스트리 값을 만들거나 변경하거나 삭제할 수 없습니다.

레지스트리 키의 액세스 권한에 대한 자세한 내용은 레지스트리 키 보안 및 액세스 권한을 참조하세요.