다음을 통해 공유


DIF_SELECTDEVICE

DIF_SELECTDEVICE 요청을 사용하면 설치 관리자가 디바이스에 대한 드라이버 선택에 참여할 수 있습니다.

보낸 경우

새로 열거된 디바이스에 대한 드라이버 또는 기존 디바이스에 대한 새 드라이버를 선택할 때(드라이버 변경) 예를 들어 사용자가 하드웨어 추가/제거를 선택하고 모뎀 클래스를 선택하는 경우입니다. 또는 사용자가 PnP 디바이스를 삽입하고 새 하드웨어를 찾은 마법사에서 "목록에서 드라이버 선택"을 선택합니다.

처리할 사람

클래스 공동 설치 관리자

처리 가능

디바이스 공동 설치 관리자

처리하지 않음

클래스 설치 관리자

처리 가능

설치 관리자 입력

DeviceInfoSet
드라이버를 선택할 디바이스가 포함된 디바이스 정보 집합 에 핸들을 제공합니다. DeviceInfoSet과 연결된 디바이스 설정 클래스가 있습니다.

DeviceInfoData
필요에 따라 디바이스 정보 집합에서 디바이스를 식별하는 SP_DEVINFO_DATA 구조에 대한 포인터를 제공합니다.

DeviceInfoDataNULL인 경우 이 요청은 DeviceInfoSet과 연결된 디바이스 설정 클래스에 대한 드라이버를 선택하는 것입니다.

디바이스 설치 매개 변수
DeviceInfoDataNULL이 아닌 경우 DeviceInfoData와 연결된 디바이스 설치 매개 변수(SP_DEVINSTALL_PARAMS)가 있습니다. DeviceInfoDataNULL인 경우 DeviceInfoSet와 연결된 디바이스 설치 매개 변수가 있습니다.

특히 드라이버 목록을 작성할 때 사용할 INF의 위치를 포함하는 DriverPath가 중요합니다.

클래스 설치 매개 변수
deviceInfoDataNULL이 아닌 경우 SP_SELECTDEVICE_PARAMS 구조가 DeviceInfoData와 연결됩니다. 그렇지 않으면 클래스 설치 매개 변수가 전체적으로 설정된 디바이스 정보와 연결됩니다.

설치 관리자 출력

디바이스 설치 매개 변수
설치 관리자는 디바이스 설치 매개 변수를 수정할 수 있습니다. 그러나 DriverPath 필드를 수정하면 안 됩니다.

클래스 설치 매개 변수
설치 관리자는 SP_SELECTDEVICE_PARAMS 수정할 수 있습니다. 예를 들어 설치 관리자는 사용자에게 드라이버를 선택하도록 요청하는 대화 상자에서 Windows에 사용할 제목 및/또는 지침을 지정할 수 있습니다.

설치 관리자가 새 select-device 매개 변수를 설정하고 이전 설치 관리자가 설정한 매개 변수를 수정하는 경우 설치 관리자는 설정하지 않은 필드를 0으로 설정해야 합니다.

설치 관리자 반환 값

공동 설치 관리자가 이 DIF 코드에 대해 아무 작업도 수행하지 않으면 전처리 단계에서 NO_ERROR 반환합니다. 공동 설치 관리자가 이 DIF 코드를 처리하는 경우 전처리 패스에서 처리하고 NO_ERROR 또는 Win32 오류 코드를 반환해야 합니다. 후처리를 위해 공동 설치 관리자가 호출될 때까지 드라이버가 이미 선택되었습니다.

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

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

참고 클래스 설치 관리자는 기본 처리기를 직접 호출할 수 있지만 클래스 설치 관리자는 기본 처리기의 작업을 대체하려고 시도해서는 안 됩니다.

기본 처리기를 호출하는 방법에 대한 자세한 내용은 기본 DIF 코드 처리기 호출을 참조하세요.

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

클래스 설치 관리자는 해당 SP_DEVINSTALL_PARAMS 구조체의 DriverPath 멤버가 NULL과 같지 않지만 지정된 경로 위치에 유효한 드라이버가 없으면 ERROR_DI_BAD_PATH 반환합니다. 경로 위치에 드라이버가 없거나 드라이버가 있지만 각 드라이버의 SP_DRVINSTALL_PARAMS 구조의 Flags 멤버가 DN_BAD_DRIVER 플래그로 설정된 경우에 발생할 수 있습니다. 이 오류 코드에 대한 응답으로 Windows는 사용자에게 오류를 표시합니다.

기본 DIF 코드 처리기

SetupDiSelectDevice

설치 관리자 작업

DIF_SELECTDEVICE 요청에 대한 응답으로 설치 관리자는 기본 처리기가 수행하는 작업 외에 디바이스 또는 디바이스 클래스에 필요한 선택 작업을 수행합니다. 설치 관리자는 일반적으로 다음 방법 중 하나로 이 DIF 요청에 응답합니다.

  • 아무 작업도 하지 않습니다.

    설치 관리자에 특별한 선택 요구 사항이 없는 경우 이 DIF 코드에 대한 응답으로 아무 것도 수행하지 않습니다. 클래스 설치 관리자는 ERROR_DI_DO_DEFAULT 반환하고 공동 설치 관리자는 NO_ERROR 반환합니다.

  • Windows가 선택 UI에 표시할 선택 문자열을 제공합니다.

    설치 관리자는 클래스 설치 매개 변수(SP_SELECTDEVICE_PARAMS)에서 선택 문자열을 제공할 수 있습니다. 예를 들어 설치 관리자는 지침 또는 창 머리글 제목을 수정할 수 있습니다.

    공동 설치 관리자가 이미 select 문자열을 제공한 경우 클래스 설치 관리자는 선택 문자열을 제공하지 않아야 합니다. 공동 설치 관리자에 더 관련성이 있는 정보가 있는 것일 수 있습니다.

    설치 관리자가 SP_SELECTDEVICE_PARAMS 수정하는 경우 설치 관리자는 SP_DEVINSTALL_PARAMS DI_USECI_SELECTSTRINGS 플래그도 설정해야 합니다.

    설치 관리자가 선택 문자열을 성공적으로 제공하는 경우 Windows는 여전히 기본 처리기를 호출해야 합니다. 따라서 이 경우 공동 설치 관리자는 NO_ERROR 반환하고 클래스 설치 관리자는 ERROR_DI_DO_DEFAULT 반환합니다.

  • 디바이스 설치 매개 변수를 수정합니다.

    설치 관리자는 디바이스 설치 매개 변수(SP_DEVINSTALL_PARAMS)를 수정할 수 있습니다. 예를 들어 설치 관리자는 windows에 디스크 있음 단추를 표시하도록 DI_SHOWOEM 플래그를 설정할 수 있습니다.

    클래스 설치 관리자가 디바이스 설치 매개 변수를 성공적으로 수정하면 클래스 설치 관리자는 ERROR_DI_DO_DEFAULT 반환합니다.

  • 사용자가 선택할 수 있는 드라이버 목록을 수정합니다.

    이 작업은 덜 일반적이지만 가능합니다. 드라이버 목록을 수정하는 설치 관리자는 선택 문자열을 제공할 수도 있고 그렇지 않을 수도 있습니다.

    드라이버 목록을 수정하는 설치 관리자는 일반적으로 디바이스에 적합하지 않은 드라이버를 표시합니다. 설치 관리자는 이러한 드라이버를 플래그 DNF_BAD_DRIVER 표시합니다. Windows는 사용자에게 표시되는 목록에서 이러한 드라이버를 생략합니다.

    설치 관리자는 다음 단계에 따라 잘못된 드라이버를 표시합니다.

    1. DriverType을 SPDIT_CLASSDRIVER 사용하여 SetupDiBuildDriverInfoList를 호출하여 드라이버 목록을 빌드합니다.
    2. SetupDiEnumDriverInfoSetupDiGetDriverInstallParams를 호출하여 목록의 첫 번째 드라이버에 대한 정보를 가져옵니다. 드라이버가 디바이스에 적합하지 않은 경우 매개 변수의 플래그 필드에 DNF_BAD_DRIVER 플래그를 설정합니다. SetupDiSetDriverInstallParams를 호출하여 매개 변수에 변경 사항을 적용합니다.
    3. 목록의 모든 드라이버를 처리할 때까지 이전 단계를 반복합니다. 해당 함수에 대한 참조 페이지에 설명된 대로 MemberIndex 매개 변수를 SetupDiEnumDriverInfo 로 증가해야 합니다.

    설치 관리자는 드라이버 목록에서 하나 이상의 드라이버에 대한 DNF_BAD_DRIVER 플래그를 설정할 수 있지만 설치 관리자는 해당 플래그를 지우지 않아야 합니다.

    하나 이상의 설치 관리자가 드라이버 목록을 성공적으로 수정하는 경우 Windows는 여전히 기본 처리기를 호출해야 합니다. 따라서 이 경우 공동 설치 관리자는 NO_ERROR 반환하고 클래스 설치 관리자는 ERROR_DI_DO_DEFAULT 반환합니다.

  • 자체 드라이버 선택 사용자 인터페이스를 표시하고 선택한 드라이버를 설정합니다.

    클래스 설치 관리자만 자체 드라이버 선택 사용자 인터페이스를 표시할 수 있습니다. 공동 설치 관리자는 그렇지 않아야 합니다. 예를 들어 클래스 설치 관리자는 텍스트 목록 대신 그림을 표시할 수 있습니다.

    클래스 설치 관리자가 선택한 드라이버를 성공적으로 설정하면 클래스 설치 관리자는 NO_ERROR 반환하고 Windows는 기본 처리기를 호출하지 않으므로 기본 선택 인터페이스를 표시하지 않습니다.

DI_ENUMSINGLEINF 플래그가 디바이스 설치 매개 변수에 설정된 경우 DriverPath 는 디렉터리의 경로가 아닌 단일 INF 파일의 경로입니다. 설치 관리자는 해당 단일 INF만 사용하여 드라이버 목록을 빌드해야 합니다.

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

요구 사항

Version

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

헤더

Setupapi.h(Setupapi.h 포함)

추가 정보

DIF_NEWDEVICEWIZARD_SELECT

SetupDiSelectDevice

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS

SP_SELECTDEVICE_PARAMS