DiInstallDriverA 函式 (newdev.h)
DiInstallDriver 函式會在驅動程式存放區中預安裝驅動程式,然後在驅動程式支援的系統上安裝驅動程式。
語法
BOOL DiInstallDriverA(
[in, optional] HWND hwndParent,
[in] LPCSTR 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 |
---|---|
|
呼叫端沒有系統管理員許可權。 根據預設,Windows 要求呼叫端具有系統管理員許可權,才能在驅動程式存放區中預安裝驅動程式套件。 |
|
指定的 INF 檔案路徑不存在。 |
|
針對 Flags 指定的值不等於零或DIIRFLAG_FORCE_INF。 |
|
呼叫的應用程式是在64位環境中嘗試執行的32位應用程式,不允許。 如需詳細資訊,請參閱 在64位系統上安裝裝置。 |
備註
DiInstallDriver 會執行下列作業:
- 在驅動程式存放區中預安裝驅動程式套件。 如果驅動程式存放區中已經預安裝相同驅動程式套件的實例, DiInstallDriver 會先移除該實例,然後將驅動程式套件的新實例新增至驅動程式存放區。
- 列舉系統中存在的裝置。
- 如果 Flags 等於零,則只有在指定的驅動程式比目前安裝在裝置上的驅動程式更符合時,才會在裝置上安裝驅動程式時,才會在裝置上安裝驅動程式。
- 如果 Flags 等於DIIRFLAG_FORCE_INF,則不論 驅動程式套件 是否比目前安裝在裝置上的驅動程式更符合裝置,都會在裝置上安裝驅動程式。
- 應用程式必須呼叫 DiInstallDriver 數次才能完成安裝。 在此情況下,應用程式應該記錄對 DiInstallDriver 的任何呼叫是否傳回 TRUENeedReboot 值,如果是的話,請在最後呼叫 DiInstallDriver 之後提示使用者重新啟動系統。
- 應用程式必須在系統重新啟動之前執行必要的作業,而不是呼叫 DiInstallDriver。 如果需要系統重新啟動,應用程式應該完成必要的作業,然後提示使用者重新啟動系統。
- 應用程式是類別安裝程式,在此情況下,類別安裝程式應該在裝置SP_DEVINSTALL_PARAMS結構的 Flags 成員中設定DI_NEEDREBOOT旗標。
注意
newdev.h 標頭會將 DiInstallDriver 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Windows Vista 和更新版本的 Windows 中使用。 |
目標平台 | 桌面 |
標頭 | newdev.h (包括 Newdev.h) |
程式庫 | Newdev.lib |