共用方式為


DiInstallDriverW 函式 (newdev.h)

DiInstallDriver 函式會在驅動程式存放區中預安裝驅動程式,然後在驅動程式支援的系統中存在的裝置上安裝驅動程式。

語法

BOOL DiInstallDriverW(
  [in, optional]  HWND    hwndParent,
  [in]            LPCWSTR InfPath,
  [in]            DWORD   Flags,
  [out, optional] PBOOL   NeedReboot
);

參數

[in, optional] hwndParent

DiInstallDriver 用來顯示與安裝裝置相關聯的任何使用者介面元件的最上層視窗句柄。 這個參數是選擇性的,而且可以設定為 NULL

[in] InfPath

NULL 終止字串的指標,提供 驅動程式套件 INF 檔案的完整路徑。

[in] Flags

DWORD 類型的值,指定零或一個或多個旗標的組合,如這裡所述, (Flags 通常設定為零) 。

如果 Flags 為零, DiInstallDriver 只會在裝置上安裝指定的驅動程式,如果驅動程式比目前安裝在裝置上的驅動程式更符合。 如需 Windows 如何為裝置選取驅動程式的相關信息,請參閱 Windows 如何選取驅動程式

如果 Flags 包含 DIIRFLAG_FORCE_INF,DiInstallDriver 會在相符的裝置上安裝指定的驅動程式,無論驅動程式是否比目前安裝在裝置上的驅動程式更符合。 如果也指定DIIRFLAG_INSTALL_AS_SET,則會忽略DIIRFLAG_FORCE_INF。

謹慎 強制安裝驅動程式可能會導致以較不相容的或較舊驅動程式取代較相容的或較新的驅動程式。
 

如果 Flags 包含 Windows 10 1709 版和更新版本) 支援的DIIRFLAG_INSTALL_AS_SET (,InfPath 應該指定目錄,而不是 INF 檔案的完整路徑,而 DiInstallDriver 將會在該目錄中安裝具有特殊行為的所有 INF 檔案。 所有 驅動程式套件 都會暫存到 驅動程式存放區 ,但尚未可供安裝在裝置上。 在下一次關機系統時,這些驅動程式套件將會在未來的裝置上安裝,而且這些套件會安裝在最適合的任何裝置上,以便裝置在下一次開機時準備就緒。

[out, optional] NeedReboot

DiInstallDriver 所設定之 BOOL 類型的值指標,指出是否需要系統重新啟動才能完成安裝。 這個參數是選擇性的,而且可以是 NULL。 如果提供 參數,而且需要重新啟動系統才能完成安裝, DiInstallDriver 會將值設定為 TRUE。 在此情況下,呼叫端必須提示使用者重新啟動系統。 如果提供此參數,而且不需要重新啟動系統才能完成安裝, DiInstallDriver 會將值設定為 FALSE。 如果 參數為 NULL ,而且需要重新啟動系統才能完成安裝, DiInstallDriver 會顯示系統重新啟動對話方塊。 如需此參數的詳細資訊,請參閱下列一節。

傳回值

如果函式成功預安裝驅動程式存放區中指定的驅動程式套件DiInstallDriver 會傳回 TRUE。 如果函式已成功在系統中的一或多個裝置上安裝驅動程式,DiInstallDriver 也會傳回 TRUE。 如果驅動程式套件未成功安裝在驅動程式存放區中, DiInstallDriver 會傳回 FALSE ,而且可以藉由呼叫 GetLastError 來擷取記錄的錯誤。 GetLastError 可能會傳回的一些較常見的錯誤值如下:

傳回碼 Description
ERROR_ACCESS_DENIED
呼叫端沒有系統管理員許可權。 根據預設,Windows 要求呼叫端具有系統管理員許可權,才能在驅動程式存放區中預安裝驅動程式套件
ERROR_FILE_NOT_FOUND
指定的 INF 檔案路徑不存在。
ERROR_INVALID_FLAGS
針對 Flags 指定的值不等於零或DIIRFLAG_FORCE_INF。
ERROR_IN_WOW64
呼叫應用程式是32位應用程式,嘗試在不允許的64位環境中執行。 如需詳細資訊,請參閱 在64位系統上安裝裝置

備註

DiInstallDriver 會執行下列作業:

  1. 預安裝驅動程式存放區中的驅動程式套件。 如果驅動程式存放區中已預安裝相同驅動程式套件的實例, DiInstallDriver 會先移除該實例,然後將驅動程式套件的新實例新增至驅動程式存放區。
  2. 列舉系統中存在的裝置。
  3. 如果 Flags 等於零,只有在指定的驅動程式比目前安裝在裝置上的驅動程式更符合時,才會在裝置上安裝驅動程式。
  4. 如果 Flags 等於DIIRFLAG_FORCE_INF,則不論 驅動程式套件 是否比目前安裝在裝置上的驅動程式更符合裝置,都會在裝置上安裝驅動程式。
一般而言,安裝應用程式應該將 NeedReboot 設定為 NULL ,以指示 DiInstallDriver 在需要重新啟動才能完成安裝時提示使用者重新啟動系統。 應用程式應該只在下列情況下提供 NeedReboot 指標:
  • 應用程式必須呼叫 DiInstallDriver 數次才能完成安裝。 在此情況下,應用程式應該記錄對 DiInstallDriver 的任何呼叫是否傳回 TRUENeedReboot 值,如果是的話,在最後呼叫 DiInstallDriver 之後提示使用者重新啟動系統。
  • 應用程式必須在系統重新啟動之前執行必要的作業,而不是呼叫 DiInstallDriver。 如果需要重新啟動系統,應用程式應該完成必要的作業,然後提示使用者重新啟動系統。
  • 應用程式是類別安裝程式,在此情況下,類別安裝程式應該在裝置SP_DEVINSTALL_PARAMS結構的 Flags 成員中設定DI_NEEDREBOOT旗標。
若要在選取的裝置上安裝選取的驅動程式,請呼叫 DiInstallDevice。 如需詳細資訊,請參閱 簡化驅動程式安裝的 SetupAPI 函式。

注意

newdev.h 標頭會將 DiInstallDriver 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 適用於 Windows Vista 和更新版本的 Windows。
目標平台 桌面
標頭 newdev.h (包含 Newdev.h)
程式庫 Newdev.lib

另請參閱

DiInstallDevice