다음을 통해 공유


DiInstallDevice 함수(newdev.h)

DiInstallDevice 함수는 시스템에 있는 지정된 디바이스의 드라이버 저장소에 미리 설치된 지정된 드라이버를 설치합니다.

구문

BOOL DiInstallDevice(
  [in, optional]  HWND             hwndParent,
  [in]            HDEVINFO         DeviceInfoSet,
  [in]            PSP_DEVINFO_DATA DeviceInfoData,
  [in, optional]  PSP_DRVINFO_DATA DriverInfoData,
  [in]            DWORD            Flags,
  [out, optional] PBOOL            NeedReboot
);

매개 변수

[in, optional] hwndParent

DiInstallDevice가 디바이스 설치와 관련된 모든 사용자 인터페이스 구성 요소를 표시하는 데 사용하는 최상위 창에 대한 핸들입니다. 이 매개 변수는 선택 사항이며 NULL로 설정할 수 있습니다.

[in] DeviceInfoSet

지정된 디바이스를 나타내는 디바이스 정보 요소가 포함된 디바이스 정보 집합에 대한 핸들입니다.

[in] DeviceInfoData

지정된 디바이스 정보 집합에서 지정된 디바이스를 나타내는 SP_DEVINFO_DATA 구조체에 대한 포인터입니다.

[in, optional] DriverInfoData

지정된 디바이스에 설치할 드라이버를 지정하는 SP_DRVINFO_DATA 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL로 설정할 수 있습니다. 이 매개 변수가 NULL인 경우 DiInstallDevice드라이버 저장소 에 미리 설치된 드라이버에서 지정된 디바이스와 가장 일치하는 드라이버를 검색하고, 드라이버가 발견되면 지정된 디바이스에 드라이버를 설치합니다.

[in] Flags

0 또는 다음 플래그를 지정하는 DWORD 형식의 값입니다.

DIIDFLAG_SHOWSEARCHUI

호출자가 드라이버를 지정하지 않는 경우(DriverInfoDataNULL로 설정됨) DiInstallDevice 는 지정된 디바이스와 일치하는 사전 설치된 드라이버를 찾지 않습니다. 대신 DiInstallDevice 는 디바이스에 대한 새 하드웨어 발견 마법사를 표시합니다.

DIIDFLAG_NOFINISHINSTALLUI

DiInstallDevice 는 마침 설치 마법사 페이지 또는 마침 설치 작업을 시작하지 않습니다. DiInstallDevice의 호출자는 이러한 작업을 시작해야 합니다. 호출자는 호출자가 호출자가 제공한 사용자 인터페이스 구성 요소의 컨텍스트에서 마침 설치 마법사 페이지를 호출해야 하는 경우에만 이 플래그를 지정해야 합니다.

DIIDFLAG_INSTALLNULLDRIVER

DiInstallDevice 는 지정된 디바이스에 null 드라이버를 설치하려고 시도합니다. 이 플래그가 설정되면 DiInstallDeviceDriverInfoData 매개 변수를 사용하지 않습니다. DiInstallDevice는 모든 디바이스 설정을 제거하고, 디바이스를 원시 모드로 실행할 수 없는 경우 함수는 디바이스의 상태 CM_PROB_FAILED_INSTALL 설정합니다. DiInstallDevice에서 null 드라이버를 설치할 수 없는 경우 디바이스의 결과 상태는 디바이스가 컴퓨터에 처음으로 연결되고 Windows에서 디바이스에 대한 드라이버를 찾지 못한 경우와 동일합니다.

DIIDFLAG_INSTALLCOPYINFDRIVERS

CopyINF 지시문을 통해 지정된 추가 INF 파일은 적용 가능한 모든 디바이스에 설치됩니다. 추가 INF를 설치하지 못하면 기본 INF 설치가 실패하지 않습니다.

[out, optional] NeedReboot

DiInstallDevice가 설치를 완료하는 데 시스템 다시 시작이 필요한지 여부를 나타내기 위해 설정하는 BOOL 형식의 값에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL로 설정할 수 있습니다. 이 매개 변수가 제공되고 설치를 완료하기 위해 시스템을 다시 시작해야 하는 경우 DiInstallDevice 는 값을 TRUE로 설정합니다. 이 경우 호출자는 시스템을 다시 시작해야 합니다. 이 매개 변수가 제공되고 시스템 다시 시작이 필요하지 않은 경우 DiInstallDevice 는 이 매개 변수를 FALSE로 설정합니다. 이 매개 변수가 NULL 이고 설치를 완료하려면 시스템 다시 시작이 필요한 경우 DiInstallDevice 는 시스템 다시 시작 대화 상자를 표시합니다.

반환 값

함수가 지정된 디바이스에 지정된 드라이버를 성공적으로 설치한 경우 DiInstallDeviceTRUE를 반환합니다. 그렇지 않으면 DiInstallDeviceFALSE 를 반환하고 GetLastError를 호출하여 기록된 오류를 검색할 수 있습니다. GetLastError에서 반환할 수 있는 몇 가지 일반적인 오류 값은 다음과 같습니다.

반환 코드 설명
ERROR_ACCESS_DENIED
호출자에게 관리자 권한이 없습니다. 기본적으로 Windows Vista 및 Windows Server 2008에서는 호출 프로세스에 디바이스에 드라이버를 설치할 수 있는 관리자 권한이 있어야 합니다.
ERROR_INVALID_FLAGS
Flags에 대해 지정된 값이 유효한 플래그 의 0 또는 비트 OR이 아닙니다.
ERROR_IN_WOW64
호출 애플리케이션은 허용되지 않는 64비트 환경에서 실행하려는 32비트 애플리케이션입니다. 자세한 내용은 64비트 시스템에 디바이스 설치를 참조하세요.

설명

특정 디바이스에 특정 드라이버를 설치해야 하는 경우에만 DiInstallDevice 를 호출합니다. 그렇지 않으면 UpdateDriverForPlugAndPlayDevices 또는 DiInstallDriver 를 사용하여 디바이스용 드라이버를 설치합니다. 디바이스에 드라이버를 설치하기 위해 호출할 이러한 함수에 대한 자세한 내용은 드라이버 설치 간소화 설치API 함수를 참조하세요.

DiInstallDevice를 호출하기 전에 호출자는 디바이스를 지정하는 SP_DEVINFO_DATA 구조와 필요에 따라 디바이스에 대한 드라이버를 지정하는 SP_DRVINFO_DATA 구조를 가져와야 합니다.

지정된 디바이스가 포함된 디바이스 정보 집합을 만들고 디바이스에 대한 SP_DEVINFO_DATA 구조를 가져오려면 다음 중 하나를 수행합니다.

  • SetupDiGetClassDevs를 호출하여 디바이스가 포함된 디바이스 정보 집합을 검색한 다음 SetupDiEnumDeviceInfo를 호출하여 디바이스 정보 집합의 디바이스를 열거합니다. 각 호출에서 SetupDiEnumDeviceInfo 는 디바이스 정보 집합의 열거된 디바이스를 나타내는 SP_DEVINFO_DATA 구조를 반환합니다. 열거된 디바이스에 대한 특정 정보를 가져오려면 SetupDiGetDeviceProperty를 호출하고 SetupDiEnumDeviceInfo에서 반환되는 SP_DEVINFO_DATA 구조를 제공하세요.
    • 또는
  • SetupDiOpenDeviceInfo를 호출하여 알려진 디바이스 instance ID가 있는 디바이스를 디바이스 정보 집합에 추가합니다. SetupDiOpenDeviceInfo 는 디바이스 정보 집합의 디바이스를 나타내는 SP_DEVINFO_DATA 구조를 반환합니다.
선택한 드라이버에 대한 SP_DRVINFO_DATA 구조를 검색하려면 SetupDiBuildDriverInfoList 를 호출하여 디바이스에 대한 드라이버 목록을 빌드한 다음 SetupDiEnumDriverInfo 를 호출하여 디바이스에 대한 드라이버 목록의 요소를 열거합니다. 열거된 각 드라이버에 대해 SetupDiEnumDriverInfo 는 드라이버를 식별하는 SP_DRVINFO_DATA 구조를 검색합니다. 또한 SetupDiGetDriverInfoDetail 을 호출하여 열거형 드라이버에 대한 추가 세부 정보를 검색할 수 있습니다.

일반적으로 설치 애플리케이션은 NeedRebootNULL로 설정해야 합니다. 이렇게 하면 설치를 완료하기 위해 다시 시작해야 하는 경우 DiInstallDevice 에서 사용자에게 시스템을 다시 시작하라는 메시지를 표시합니다. 애플리케이션은 다음 경우에만 NeedReboot 포인터를 제공해야 합니다.

  • 애플리케이션은 설치를 완료하려면 DiInstallDevice 를 여러 번 호출해야 합니다. 이 경우 애플리케이션은 DiInstallDevice 에 대한 호출에서 TRUENeedReboot 값이 반환되는지 여부를 기록해야 하며, 이 경우 DiInstallDevice에 대한 최종 호출이 반환된 후 사용자에게 시스템을 다시 시작하라는 메시지를 표시합니다.
  • 애플리케이션은 시스템을 다시 시작하기 전에 DiInstallDevice를 호출하는 것 외에 필요한 작업을 수행해야 합니다. 시스템 다시 시작이 필요한 경우 애플리케이션은 필요한 작업을 완료한 다음 사용자에게 시스템을 다시 시작하라는 메시지를 표시해야 합니다.
  • 애플리케이션은 클래스 설치 관리자입니다. 이 경우 클래스 설치 관리자는 디바이스에 대한 SP_DEVINSTALL_PARAMS 구조의 Flags 멤버에서 DI_NEEDREBOOT 플래그를 설정해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 및 이후 버전의 Windows에서 사용할 수 있습니다.
대상 플랫폼 데스크톱
머리글 newdev.h(Newdev.h 포함)
라이브러리 Newdev.lib
DLL Newdev.dll

추가 정보

DiInstallDriver

SetupDiBuildDriverInfoList

SetupDiEnumDeviceInfo

SetupDiEnumDriverInfo

SetupDiGetClassDevs

SetupDiGetDeviceProperty

SetupDiGetDriverInfoDetail

SetupDiOpenDeviceInfo

UpdateDriverForPlugAndPlayDevices