수업 설치 관리자 및 Co-Installers 작성

참고

이 섹션에 설명된 기능은 범용 또는 모바일 드라이버 패키지에서 지원되지 않습니다. 유니버설 INF 파일 사용을 참조하세요.

이 섹션에는 공동 설치 관리자를 작성할 때 따라야 하는 지침이 포함되어 있습니다.

사용자 인터페이스 표시

디바이스 설치 상태 저장

실행 파일 또는 DLL 파일 로드

다른 프로세스 또는 서비스 시작

공동 설치 관리자를 작성하는 방법에 대한 자세한 내용은 공동 설치 관리자 작성을 참조하세요.

사용자 인터페이스 표시

디바이스 설치는 대부분 시스템(비대화형) 서비스에서 실행됩니다. 따라서 사용자는 이 컨텍스트에 표시되는 사용자 인터페이스를 보거나 응답할 수 없습니다. DIF(디바이스 설치 함수) 코드를 처리하는 동안 공동 설치 관리자에 제공된 대화 상자는 디바이스 설치의 응답을 중지합니다.

대부분의 경우 공동 설치 관리자는 완료 설치 작업을 처리하는 동안을 제외하고 사용자와 상호 작용해서는 안 됩니다. 마침 설치 작업은 대화형 컨텍스트에서 실행됩니다.

참고 공동 설치 관리자는 디바이스 설치가 실패하므로 ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION DIF 코드에 실패하지 않아야 합니다. 디바이스 설치에 사용자 상호 작용이 필요한 경우 공동 설치 관리자는 마침 설치 작업을 지원해야 합니다.

디바이스 설치 상태 저장

공동 설치 관리자 DLL(동적 링크 라이브러리) 내에 디바이스 설치 상태를 저장하지 마세요. Windows는 일반적으로 설치 관리자가 DIF 코드를 처리한 후 DLL을 언로드하므로 DLL 내에 저장된 상태 정보는 유지되지 않습니다.

디바이스 설치 관리자 상태를 안전하게 유지하려면 클래스 설치 관리자 또는 공동 설치 관리자가 상태 정보를 레지스트리의 디바이스 드라이버 키 내 속성으로 저장해야 합니다. 이렇게 하려면 다음 단계를 수행하세요.

  1. 디바이스 instance 대한 드라이버 키에 대한 레지스트리 핸들을 검색하려면 KeyType 매개 변수가 DIREG_DRV 설정된 SetupDiOpenDevRegKey를 사용합니다.

  2. SetupDiGetDevicePropertyKeys(디바이스 instance 대한 모든 속성 키를 검색하려면) 또는 SetupDiGetDeviceProperty를 사용하여 지정된 디바이스 instance 속성 키를 검색합니다.

  3. SetupDiSetDeviceProperty를 사용하여 디바이스 instance 속성 키를 저장합니다.

실행 파일 또는 DLL 파일 로드

공동 설치 관리자가 Windows 64비트 플랫폼에서 서명되지 않은 실행 파일 또는 DLL을 로드하려고 하면 운영 체제에서 이 보안 환경에서 로드되지 않습니다.

클래스 설치 관리자 또는 공동 설치 관리자가 실행 파일 또는 DLL을 안전하게 로드하려면 실행 파일 또는 DLL을 디지털 서명된 드라이버 패키지에 포함하는 것이 좋습니다. 드라이버 패키지에 서명하는 방법에 대한 자세한 내용은 드라이버 서명을 참조하세요.

참고 클래스 설치 관리자 및 공동 설치 관리자는 LoadLibrary와 같은 명시적 함수 호출 또는 링크 종속성을 만들어 DLL 모듈을 로드해서는 안 됩니다.

다른 프로세스 또는 서비스 시작

디바이스를 설치하는 동안 Windows는 추가 프로세스를 추적할 수 없으며 수행 중인 작업 또는 완료 시기를 확인할 수 없습니다. 예를 들어 프로세스가 중요한 작업을 수행하는 동안 Windows에서 디바이스를 시작하거나 중지하거나 시스템 다시 시작을 시작할 수 있습니다.

대부분의 경우 공동 설치 관리자는 다른 프로세스 또는 서비스를 시작해서는 안 됩니다. 그러나 설치 관리자는 마침 설치 작업을 통해 표시되는 함수 또는 대화 상자에서 CreateProcess를 호출하여 다른 프로세스를 안전하게 시작할 수 있습니다. 설치 관리자는 만든 프로세스가 종료될 때까지 사용자가 대화 상자 또는 프로시저에서 계속 진행하도록 해서는 안 됩니다.