處理 DIF 程式碼
注意
本節所述的功能不受支援,且包含這些功能的驅動程式套件將不再收到 Microsoft 簽章。 請參閱 使用通用 INF 檔案。
裝置安裝應用程式會呼叫SetupDiCallClassInstaller,將裝置安裝函式代碼 (DIF 代碼) 傳送至安裝程式。 此函式接著會呼叫安裝程式的進入點函式。 如需安裝程式進入點的描述,請參閱:
每個 DIF 程式碼的參考頁面都包含下列各節:
傳送時
描述裝置安裝應用程式傳送此 DIF 要求的一般時間和原因。
誰處理
指定允許哪些安裝程式處理此要求。 安裝套裝程式括類別安裝程式、類別共同安裝程式 (全安裝程式) ,以及裝置共同安裝程式 (裝置特定共同安裝程式) 。
安裝程式輸入
除了 DIF 程式碼之外, SetupDiCallClassInstaller 還提供與特定要求相關的其他資訊。 如需每個要求提供的資訊詳細資訊,請參閱每個 DIF 程式碼的參考頁面。 下列清單包含其他輸入參數的一般描述,並列出裝置安裝函式 (SetupDiXxx函式) 安裝程式可以呼叫以處理參數:
控制碼不透明。 例如,使用控制碼來識別在對SetupDiXxx函式的呼叫中設定的裝置資訊。
DeviceInfoSet可能有相關聯的裝置設定類別。 如果是,請呼叫 SetupDiGetDeviceInfoListClass 以取得類別 GUID。
DeviceInfoData
選擇性地提供 SP_DEVINFO_DATA 結構的指標,以識別裝置資訊集中的裝置。
裝置安裝參數
這些間接參數會提供 SP_DEVINSTALL_PARAMS 結構中裝置安裝的資訊。 如果 DeviceInfoData 不是 Null,則有與 DeviceInfoData相關聯的裝置安裝參數。 如果 DeviceInfoData 為 Null,則裝置安裝參數會與 DeviceInfoSet相關聯。
呼叫 SetupDiGetDeviceInstallParams 以取得裝置安裝參數。
類別安裝參數
選擇性間接參數是特定 DIF 要求的特定參數。 這些基本上是「DIF 要求參數」。例如,DIF_REMOVE安裝要求的類別安裝參數包含在SP_REMOVEDEVICE_PARAMS結構中。
每個 SP_XXX_PARAMS 結構都會以固定大小的SP_CLASSINSTALL_HEADER 結構開始。
呼叫 SetupDiGetClassInstallParams 以取得類別安裝參數。
如果 DIF 要求具有類別安裝參數,則如果 DIF 要求指定DeviceInfoData) ,則會有一組與DeviceInfoData相關聯的參數,以及另一組與DeviceInfoData相關聯的參數 (。 SetupDiGetClassInstallParams 會傳回可用的最特定參數。
如果安裝程式修改裝置安裝參數,安裝程式必須呼叫 SetupDiSetDeviceInstallParams ,才能傳回變更。 同樣地,如果安裝程式修改 DIF 程式碼的類別安裝參數,安裝程式必須呼叫 SetupDiSetClassInstallParams。
安裝程式傳回值
指定 DIF 程式碼的適當傳回值。 如需傳回值的詳細資訊,請參閱下圖。
預設 DIF 程式碼處理常式
指定SetupDiXxx函式,該函式會執行 DIF 程式碼的系統定義預設作業。 並非所有 DIF 程式碼都有預設處理常式。 除非共同安裝程式或類別安裝程式採取步驟來防止呼叫預設處理常式, 否則 SetupDiCallClassInstaller 會在呼叫類別安裝程式 (,但在呼叫任何註冊後置處理) 的共同安裝程式之前,呼叫 DIF 程式碼的預設處理常式。
如果類別安裝程式成功處理 DIF 程式碼,且 SetupDiCallClassInstaller 後續應該呼叫預設處理常式,類別安裝程式會傳回ERROR_DI_DO_DEFAULT。
如果類別安裝程式成功處理 DIF 程式碼,包括直接呼叫預設處理常式,類別安裝程式應該會傳回NO_ERROR, 而 SetupDiCallClassInstaller 不會接著再次呼叫預設處理常式。 請注意,類別安裝程式可以直接呼叫預設處理常式,但類別安裝程式不應嘗試取代預設處理常式的作業。
如果類別安裝程式發生錯誤,安裝程式應該會傳回適當的 Win32 錯誤碼, 而且 SetupDiCallClassInstaller 後續不會呼叫預設處理常式。
共同安裝程式 不應該 呼叫預設 DIF 程式碼處理常式。
安裝程式作業
描述安裝程式可能需要採取一般步驟來處理 DIF 要求。
下圖顯示 SetupDiCallClassInstaller 中用來處理 DIF 程式碼的事件順序。
作業系統會針對每個 DIF 程式碼執行一些作業。 廠商提供的共同安裝程式和類別安裝程式可以參與安裝活動。 請注意, SetupDiCallClassInstaller 會呼叫註冊後置處理的共同安裝程式,即使 DIF 程式碼失敗也一樣。