共用方式為


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 通常設定為零)。

如果 旗標 為零,DiInstallDriver 只有在驅動程式比目前安裝在裝置上的驅動程式更符合裝置時,才會在裝置上安裝指定的驅動程式。 如需 Windows 如何選取裝置驅動程式的詳細資訊,請參閱 Windows 如何選取驅動程式

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

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

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

[out, optional] NeedReboot

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

傳回值

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

傳回碼 描述
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. 如果 旗標 等於零,則只有在指定的驅動程式比目前安裝在裝置上的驅動程式更符合時,才會將驅動程式安裝在裝置上。
  4. 如果 旗標 等於DIIRFLAG_FORCE_INF,則不論 驅動程式套件 是否比目前安裝在裝置上的驅動程式,都會在裝置上安裝驅動程式。
一般而言,安裝應用程式應該將 NeedReboot 設定為 NULL,以指示 DiInstallDriver,以提示使用者重新啟動系統,如果需要重新啟動才能完成安裝。 應用程式應該只在下列情況下提供 NeedReboot 指標:
  • 應用程式必須呼叫 DiInstallDriver 數次才能完成安裝。 在此情況下,應用程式應該記錄 TRUENeedReboot 值是否由任何呼叫 DiInstallDriver 傳回,如果是的話,請在最後 呼叫 DiInstallDriver 之後,提示使用者重新啟動系統。
  • 應用程式必須執行必要的作業,而不是呼叫 DiInstallDriver,才能發生系統重新啟動。 如果需要系統重新啟動,應用程式應該完成必要的作業,然後提示使用者重新啟動系統。
  • 應用程式是類別安裝程式,在此情況下,類別安裝程式應該在裝置的 Flags SP_DEVINSTALL_PARAMS 成員中設定DI_NEEDREBOOT旗標。
若要在選取的裝置上安裝選取的驅動程式,請呼叫 DiInstallDevice。 如需詳細資訊,請參閱 簡化驅動程式安裝的 SetupAPI 函式。

注意

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

要求

要求 價值
最低支援的用戶端 適用於 Windows Vista 和更新版本的 Windows。
目標平臺 桌面
標頭 newdev.h (包括 Newdev.h)
連結庫 Newdev.lib

另請參閱

DiInstallDevice