共用方式為


DIF_SELECTDEVICE

DIF_SELECTDEVICE要求可讓安裝程式參與選取裝置的驅動程式。

傳送時

針對新列舉的裝置選擇驅動程式,或現有裝置的新驅動程式時, (變更驅動程式) 。 例如,當使用者選取 [新增/移除硬體] 並選取數據機類別時。 或者,使用者插入 PnP 裝置,並在 [找到新的硬體精靈] 中選取 [從清單中選擇驅動程式]。

誰處理

類別共同安裝程式

可以處理

裝置共同安裝程式

不處理

類別安裝程式

可以處理

安裝程式輸入

DeviceInfoSet
提供裝置 資訊的 控制碼,其中包含要選取驅動程式的裝置。 有一個與DeviceInfoSet相關聯的裝置安裝類別

DeviceInfoData
選擇性地提供 SP_DEVINFO_DATA 結構的指標,以識別裝置資訊集中的裝置。

如果DeviceInfoDataNull,則此要求是針對與DeviceInfoSet相關聯的裝置安裝類別選取驅動程式。

裝置安裝參數
如果 DeviceInfoData 不是 Null,則裝置安裝參數 (SP_DEVINSTALL_PARAMSDeviceInfoData相關聯的) 。 如果 DeviceInfoDataNull,則有與 DeviceInfoSet相關聯的裝置安裝參數。

特別感興趣的是 DriverPath,其中包含建置驅動程式清單時要使用的 INF () 位置。

類別安裝參數
如果DeviceInfoData不是Null則SP_SELECTDEVICE_PARAMS結構與DeviceInfoData相關聯。 否則,類別安裝參數會與整體設定的裝置資訊相關聯。

安裝程式輸出

裝置安裝參數
安裝程式可以修改裝置安裝參數。 不過,它不應該修改 DriverPath 欄位。

類別安裝參數
安裝程式可以修改 SP_SELECTDEVICE_PARAMS。 例如,安裝程式可能會指定標題和/或指示,讓 Windows 在要求使用者選取驅動程式的對話方塊中使用。

如果安裝程式設定新的選取裝置參數,而不是修改先前安裝程式所設定的參數,安裝程式必須零未設定的欄位。

安裝程式傳回值

如果共同安裝程式對此 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結構已 設定DN_BAD_DRIVER旗標,就會發生這種情況。 為了回應此錯誤碼,Windows 向使用者顯示錯誤。

預設 DIF 程式碼處理常式

SetupDiSelectDevice

安裝程式作業

為了回應DIF_SELECTDEVICE要求,安裝程式除了預設處理常式執行其裝置或裝置類別所需的任何選取作業。 安裝程式通常會以下列其中一種方式回應此 DIF 要求:

  • 不執行任何動作。

    如果安裝程式沒有特殊選取需求,它不會回應此 DIF 程式碼。 類別安裝程式會傳回ERROR_DI_DO_DEFAULT,而共同安裝程式會傳回NO_ERROR。

  • 提供 Windows 將在選取 UI 中顯示的選取字串。

    安裝程式可以在類別安裝參數中提供選取字串, (SP_SELECTDEVICE_PARAMS) 。 例如,安裝程式可以修改 指令 或視窗標題 標題

    如果共同安裝程式已經提供選取字串,類別安裝程式就不應該提供選取字串。 共同安裝程式可能有更多相關資訊。

    如果安裝程式修改 SP_SELECTDEVICE_PARAMS,安裝程式也必須在SP_DEVINSTALL_PARAMS中設定 DI_USECI_SELECTSTRINGS旗標。

    如果安裝程式成功提供選取字串,Windows 仍必須呼叫預設處理常式。 因此,在此情況下,共同安裝程式會傳回NO_ERROR,而類別安裝程式會傳回ERROR_DI_DO_DEFAULT。

  • 修改裝置安裝參數。

    安裝程式可以修改裝置安裝參數, (SP_DEVINSTALL_PARAMS) 。 例如,安裝程式可能會將DI_SHOWOEM旗標設定為讓 Windows 顯示 [ 有磁片 ] 按鈕。

    如果類別安裝程式成功修改裝置安裝參數,類別安裝程式會傳回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 程式碼

規格需求

版本

Microsoft Windows 2000 和更新版本的 Windows 支援。

標頭

Setupapi.h (包含 Setupapi.h)

另請參閱

DIF_NEWDEVICEWIZARD_SELECT

SetupDiSelectDevice

SP_DEVINFO_DATA

SP_DEVINSTALL_PARAMS

SP_SELECTDEVICE_PARAMS