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 程式碼處理常式
安裝程式作業
為了回應DIF_INSTALLDEVICE要求安裝程式通常會在預設處理常式安裝裝置之前執行任何最終安裝作業。 例如,安裝程式可以檢查並可能修改登錄中所列裝置的上層篩選驅動程式和較低篩選驅動程式。
除非在裝置安裝參數中設定DI_NOFILECOPY旗標,否則處理此 DIF 要求的安裝程式應該複製裝置所需的檔案,例如驅動程式檔案和控制台檔案。
如果DI_NOFILECOPY旗標清楚,但已設定DI_NOVCP旗標,安裝程式必須將任何檔案作業加入提供的檔案佇列,但不得認可佇列。
共同安裝程式可以在前置處理階段和/或後置處理階段中處理此 DIF 要求。 在其前置處理階段中,共同安裝程式會執行 Windows 載入驅動程式並啟動裝置之前必須發生的任何作業。
在其後置處理階段中,除非已設定DI_NEEDREBOOT旗標,否則裝置會啟動並執行。 如果設定此旗標,Windows 無法以動態方式讓裝置上線。
如果安裝程式傳回 Win32 錯誤碼,Windows 會放棄安裝。
如果 Windows 找不到新裝置的 INF 檔案,它會在嘗試安裝 Null 驅動程式時傳送DIF_INSTALLDEVICE。 預設處理常式 (SetupDiInstallDevice) 會檢查裝置是否支援 原始模式 ,或是 IoReportDetectedDevice) 所報告的非 PnP 裝置 (,在後者的情況下,Windows 會安裝裝置的 Null 驅動程式。
如果此嘗試失敗,Windows 會再次傳送DIF_INSTALLDEVICE,這次會在 SP_DEVINSTALL_PARAMS 結構中設定 DI_FLAGSEX_SETFAILEDINSTALL 旗標。 在此情況下,預設處理常式只會在裝置的 ConfigFlags 登錄值中設定 FAILEDINSTALL 旗標。 如果已設定DI_FLAGSEX_SETFAILEDINSTALL旗標,類別安裝程式必須傳回NO_ERROR或ERROR_DI_DO_DEFAULT,且共同安裝程式必須傳回NO_ERROR。
如需 DIF 程式碼的詳細資訊,請參閱 處理 DIF 程式碼。
呼叫預設處理常式 SetupDiInstallDevice
如需何時以及如何呼叫 SetupDiInstallDevice的一般資訊,請參閱 呼叫預設 DIF 程式碼處理常式。
在類別安裝程式必須在所有 SetupDiInstallDevice 作業之後執行作業的罕見情況,除了啟動裝置之外,類別安裝程式必須:
執行必須在呼叫 SetupDiInstallDevice之前完成的作業。
在SP_DEVINSTALL_PARAMS中設定DI_DONOTCALLCONFIGMGR旗標。標幟 裝置的成員。 如果設定此旗標, 則 SetupDiInstallDevice 會執行所有預設安裝作業,但啟動裝置除外。
呼叫 SetupDiInstallDevice 來執行所有預設安裝作業,但啟動裝置除外。
執行所有預設安裝作業之後必須完成的作業,但啟動裝置除外。
呼叫 SetupDiRestartDevices 以啟動裝置。
如果類別安裝程式成功完成安裝作業,或如果安裝作業失敗,則傳回NO_ERROR。
規格需求
版本 |
Microsoft Windows 2000 和更新版本的 Windows 支援。 |
標頭 |
Setupapi.h (包含 Setupapi.h) |