UpdateDriverForPlugAndPlayDevicesA 函式 (newdev.h)
假設有 INF 檔案和 硬體識別碼, UpdateDriverForPlugAndPlayDevices 函式 會針對符合硬體識別碼的裝置安裝更新的驅動程式。
語法
BOOL UpdateDriverForPlugAndPlayDevicesA(
[in, optional] HWND hwndParent,
[in] LPCSTR HardwareId,
[in] LPCSTR FullInfPath,
[in] DWORD InstallFlags,
[out, optional] PBOOL bRebootRequired
);
參數
[in, optional] hwndParent
最上層視窗的句柄,用於與安裝裝置相關的任何 UI。
[in] HardwareId
NULL 終止字串的指標,提供硬體識別碼以符合電腦上的現有裝置。 NULL 終止硬體標識碼的最大長度是MAX_DEVICE_ID_LEN。 如需硬體識別碼的詳細資訊,請參閱 裝置識別字串。
[in] FullInfPath
NULL 終止字串的指標,提供 INF 檔案的完整路徑檔名。 這些檔案應該位於散發媒體或廠商建立的目錄中,而不是位於系統位置,例如 %SystemRoot%\inf。 UpdateDriverForPlugAndPlayDevices 會在安裝成功時,將驅動程式檔案複製到適當的系統位置。
[in] InstallFlags
使用 OR 結合下列零個或多個位旗標所建立的呼叫端提供值:
INSTALLFLAG_FORCE
如果已設定此旗標,且函式找到符合 HardwareId 值的裝置,則函式會為裝置安裝新的驅動程式,無論計算機上是否有更好的驅動程式存在。
INSTALLFLAG_READONLY
如果設定此旗標,函式將不會複製、重新命名或刪除任何安裝檔案。 使用此旗標應受限於限制或不可能存取檔案的環境,例如「內嵌」操作系統。
INSTALLFLAG_NONINTERACTIVE
如果設定此旗標,當偵測到任何嘗試顯示UI時,函式會傳回 FALSE 。 只有當函式從元件 (呼叫,例如無法顯示UI的服務) 時,才設定此旗標。
[out, optional] bRebootRequired
BOOL 型別變數的指標,指出是否需要重新啟動,以及應該提示重新啟動的人員。 此指標是選擇性的,可以是 NULL。
如果指標為 NULL, 如有必要,UpdateDriverForPlugAndPlayDevices 會在安裝驅動程式之後提示重新啟動。 如果提供指標,函式會傳回 BOOLEAN 值,如果系統應該重新啟動,則為 TRUE 。 接著,呼叫者必須負責提示重新啟動。
如需詳細資訊,請參閱下列一節。
傳回值
如果裝置升級至指定的驅動程式,函式會傳回 TRUE 。
否則,它會傳回 FALSE ,而且可以透過呼叫 GetLastError 來擷取記錄的錯誤。 下表包含 GetLastError 傳回的可能錯誤值。
傳回碼 | Description |
---|---|
|
針對 FullInfPath 指定的路徑不存在。 |
|
呼叫的應用程式是嘗試在64位環境中執行的32位應用程式,不允許。 |
|
為 InstallFlags 指定的值無效。 |
|
針對 HardwareId 指定的值不符合系統上的任何裝置。 也就是說,裝置未插入。 |
|
函式發現 HardwareId 值的相符專案,但指定的驅動程式與目前的驅動程式不相符,而且呼叫端未指定INSTALLFLAG_FORCE旗標。 |
備註
UpdateDriverForPlugAndPlayDevices 會掃描系統上的裝置,並嘗試針對符合指定 HardwareId 值的任何裝置安裝 FullInfPath 所指定的驅動程式。
默認行為是只有在比目前安裝的驅動程式更符合時,才安裝指定的驅動程式,而指定的驅動程式也比 %SystemRoot%\inf 中的任何驅動程式更符合。 如需詳細資訊,請參閱 Windows 如何選取驅動程式。
UpdateDriverForPlugAndPlayDevices 也可以用來判斷具有指定 HardwareId 值的裝置是否已插入。 如需詳細資訊,請參閱 撰寫裝置安裝應用程式。
UpdateDriverForPlugAndPlayDevices 會將 IRP_MN_QUERY_REMOVE_DEVICE 要求傳送至指定的裝置、裝置的所有子系,以及以遞歸方式屬於裝置移除關聯的其他所有裝置。 如果其中任何一個裝置無法移除查詢要求, UpdateDriverForPlugAndPlayDevices 會在裝置之 SP_DEVINSTALL_PARAMS 結構的 Flags 成員中設定 DI_NEEDREBOOT 旗標。 如需移除關聯的詳細資訊,請參閱 IRP_MN_QUERY_DEVICE_RELATIONS 要求。
一般而言,裝置安裝應用程式應該為 bRebootRequired 提供 NULL。 因此,系統會在必要時起始重新啟動。 應用程式 應該只在 下列情況下指定指標值:
- 應用程式必須呼叫 UpdateDriverForPlugAndPlayDevices 數次才能完成安裝。
- 如果發生) ,應用程式必須在重新啟動之前執行其他作業 (。
- 應用程式是類別安裝程式,如果需要重新啟動,則應該在 SP_DEVINSTALL_PARAMS 中設定 DI_NEEDREBOOT 。
如果函式在32位應用程式中傳回ERROR_IN_WOW64,則應用程式會在不允許的64位系統上執行。 如需詳細資訊,請參閱 在64位系統上安裝裝置。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Microsoft Windows 2000 和更新版本的 Windows 中使用。 |
目標平台 | 桌面 |
標頭 | newdev.h (包括 Newdev.h) |
程式庫 | Newdev.lib |