다음을 통해 공유


DIF_INSTALLDEVICE

DIF_INSTALLDEVICE 요청을 사용하면 설치 관리자가 디바이스가 설치되기 전 및/또는 후에 작업을 수행할 수 있습니다.

보낸 경우

드라이버를 선택하고, 디바이스 공동 설치 관리자를 등록하고, 디바이스 인터페이스를 등록한 후

처리할 사람

클래스 공동 설치 관리자

처리 가능

디바이스 공동 설치 관리자

처리 가능

클래스 설치 관리자

처리 가능

설치 관리자 입력

DeviceInfoSet
설치할 디바이스가 포함된 디바이스 정보 집합 에 핸들을 제공합니다.

DeviceInfoData
디바이스 정보 집합의 디바이스에 대한 SP_DEVINFO_DATA 구조에 대한 포인터를 제공합니다.

디바이스 설치 매개 변수
DeviceInfoData와 연결된 디바이스 설치 매개 변수(SP_DEVINSTALL_PARAMS)가 있습니다.

클래스 설치 매개 변수
없음

설치 관리자 출력

디바이스 설치 매개 변수
설치 관리자는 DeviceInfoData에 대한 디바이스 설치 매개 변수를 수정할 수 있습니다. 예를 들어 설치 관리자는 DI_NEEDREBOOT 플래그를 설정하거나 DI_DONOTCALLCONFIGMG 플래그를 설정하여 Windows가 새로 설치된 드라이버 및 설정으로 디바이스를 동적으로 온라인 상태로 만드는 것을 방지할 수 있습니다.

설치 관리자 반환 값

공동 설치 관리자는 일반적으로 NO_ERROR 또는 ERROR_DI_POSTPROCESSING_REQUIRED 반환합니다. 공동 설치 관리자는 Win32 오류 코드를 반환할 수도 있습니다.

클래스 설치 관리자가 이 요청을 성공적으로 처리하고 SetupDiCallClassInstaller 가 이후에 기본 처리기를 호출해야 하는 경우 클래스 설치 관리자는 ERROR_DI_DO_DEFAULT 반환합니다.

클래스 설치 관리자가 기본 처리기를 직접 호출하는 것을 포함하여 이 요청을 성공적으로 처리하는 경우 클래스 설치 관리자는 NO_ERROR 반환해야 하며 SetupDiCallClassInstaller 는 이후에 기본 처리기를 다시 호출하지 않습니다.

참고 클래스 설치 관리자는 기본 처리기를 직접 호출할 수 있지만 클래스 설치 관리자는 기본 처리기의 작업을 대체하려고 시도해서는 안 됩니다. 기본 DIF 코드 처리기를 호출하는 방법에 대한 자세한 내용은 기본 DIF 코드 처리기 호출을 참조하세요.

클래스 설치 관리자에 오류가 발생하면 설치 관리자는 적절한 Win32 오류 코드를 반환해야 하며 SetupDiCallClassInstaller 는 이후에 기본 처리기를 호출하지 않습니다.

기본 DIF 코드 처리기

SetupDiInstallDevice

설치 관리자 작업

DIF_INSTALLDEVICE 요청에 대한 응답으로 설치 관리자는 일반적으로 기본 처리기가 디바이스를 설치하기 전에 최종 설치 작업을 수행합니다. 예를 들어 설치 관리자는 레지스트리에 나열된 디바이스에 대한 상위 필터 드라이버 및 하위 필터 드라이버를 검사 수정할 수 있습니다.

디바이스 설치 매개 변수에 DI_NOFILECOPY 플래그를 설정하지 않는 한 이 DIF 요청을 처리하는 설치 관리자는 드라이버 파일 및 제어판 파일과 같이 디바이스에 필요한 파일을 복사해야 합니다.

DI_NOFILECOPY 플래그가 명확하지만 DI_NOVCP 플래그가 설정된 경우 설치 관리자는 파일 작업을 제공된 파일 큐에 큐에 추가해야 하지만 큐를 커밋해서는 안 됩니다.

공동 설치 관리자는 전처리 패스 및/또는 후처리 패스에서 이 DIF 요청을 처리할 수 있습니다. 전처리 단계에서 공동 설치 관리자는 Windows가 드라이버를 로드하고 디바이스를 시작하기 전에 수행해야 하는 모든 작업을 수행합니다.

후처리 패스에서 DI_NEEDREBOOT 플래그가 설정되지 않은 한 디바이스가 실행되고 있습니다. 이 플래그를 설정하면 Windows에서 디바이스를 동적으로 온라인 상태로 설정할 수 없습니다.

설치 관리자가 Win32 오류 코드를 반환하면 Windows에서 설치를 중단합니다.

Windows에서 새 디바이스에 대한 INF 파일을 찾을 수 없는 경우 null 드라이버를 설치하기 위해 DIF_INSTALLDEVICE 보냅니다. 기본 처리기(SetupDiInstallDevice)는 디바이스가 원시 모드 를 지원하는지 아니면 PnP가 아닌 디바이스( IoReportDetectedDevice에서 보고됨)인지 확인합니다. 후자의 경우 Windows는 디바이스에 대해 null 드라이버를 설치합니다.

이 시도가 실패하면 Windows는 SP_DEVINSTALL_PARAMS 구조에 설정된 DI_FLAGSEX_SETFAILEDINSTALL 플래그를 사용하여 DIF_INSTALLDEVICE 다시 보냅니다. 이 경우 기본 처리기는 디바이스의 ConfigFlags 레지스트리 값에서 FAILEDINSTALL 플래그만 설정합니다. DI_FLAGSEX_SETFAILEDINSTALL 플래그가 설정된 경우 클래스 설치 관리자는 NO_ERROR 또는 ERROR_DI_DO_DEFAULT 반환해야 하며 공동 설치 관리자는 NO_ERROR 반환해야 합니다.

DIF 코드에 대한 자세한 내용은 DIF 코드 처리를 참조하세요.

기본 처리기 SetupDiInstallDevice 호출

SetupDiInstallDevice를 호출하는 시기와 방법에 대한 일반적인 내용은 기본 DIF 코드 처리기 호출을 참조하세요.

디바이스 시작을 제외한 모든 SetupDiInstallDevice 작업이 완료된 후 클래스 설치 관리자가 작업을 수행해야 하는 드문 경우 클래스 설치 관리자는 다음을 수행해야 합니다.

  1. SetupDiInstallDevice를 호출하기 전에 수행해야 하는 작업을 수행합니다.

  2. SP_DEVINSTALL_PARAMS DI_DONOTCALLCONFIGMGR 플래그를 설정합니다. 디바이스에 대한 플래그 멤버입니다. 이 플래그가 설정되면 SetupDiInstallDevice 는 디바이스 시작을 제외한 모든 기본 설치 작업을 수행합니다.

  3. SetupDiInstallDevice를 호출하여 디바이스 시작을 제외한 모든 기본 설치 작업을 수행합니다.

  4. 디바이스 시작을 제외한 모든 기본 설치 작업이 완료된 후에 수행해야 하는 작업을 수행합니다.

  5. SetupDiRestartDevices를 호출하여 디바이스를 시작합니다.

  6. 클래스 설치 관리자가 설치 작업을 성공적으로 완료한 경우 NO_ERROR 반환하거나 설치 작업이 실패한 경우 Win32 오류를 반환합니다.

요구 사항

Version

Microsoft Windows 2000 이상 버전의 Windows에서 지원됩니다.

헤더

Setupapi.h(Setupapi.h 포함)

추가 정보

DIF_INSTALLDEVICEFILES

SetupDiInstallDevice

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS