共用方式為


diRollbackDriver 函式 (newdev.h)

DiRollbackDriver 函式會復原安裝在指定裝置上的驅動程式。

語法

BOOL DiRollbackDriver(
  [in]            HDEVINFO         DeviceInfoSet,
  [in]            PSP_DEVINFO_DATA DeviceInfoData,
  [in, optional]  HWND             hwndParent,
  [in]            DWORD            Flags,
  [out, optional] PBOOL            NeedReboot
);

參數

[in] DeviceInfoSet

裝置資訊集的句柄,其中包含代表執行驅動程序復原之裝置的裝置信息元素。

[in] DeviceInfoData

SP_DEVINFO_DATA 結構的指標,代表執行驅動程序復原之指定裝置資訊集中的特定裝置。

[in, optional] hwndParent

DiRollbackDriver 用來顯示與指定裝置之驅動程序復原相關聯的任何使用者介面元件的最上層視窗句柄。 此參數是選擇性的,而且可以設定為 NULL

[in] Flags

DWORD 類型的值,可設定為零或ROLLBACK_FLAG_NO_UI。

一般而言,此旗標應該設定為零,在此情況下 ,DiRollbackDriver 不會隱藏與驅動程序復原相關聯的默認使用者介面元件。 不過,如果此旗標設定為 ROLLBACK_FLAG_NO_UI,DiRollbackDriver 會隱藏與驅動程序復原相關聯的使用者介面元件顯示。

[out, optional] NeedReboot

DiRollbackDriver 所設定之 BOOL 類型的值指標,指出是否需要系統重新啟動才能完成復原。 此參數是選擇性的,可以是 NULL

如果提供 參數,而且需要重新啟動系統才能完成復原, DiRollbackDriver 會將值設定為 TRUE。 在此情況下,呼叫端必須提示使用者重新啟動系統。 如果提供此參數,而且不需要系統重新啟動才能完成安裝, DiRollbackDriver 會將值設定為 FALSE

如果 參數為 NULL ,而且需要系統重新啟動才能完成復原, DiRollbackDriver 會顯示系統重新啟動對話方塊。

如需此參數的詳細資訊,請參閱下列一節。

傳回值

如果函式已成功回復裝置的驅動程式,DiRollbackDriver 會傳回 TRUE;否則,DiRollbackDriver 會傳回 FALSE,而且可以藉由呼叫 GetLastError 來擷取記錄的錯誤。 GetLastError 可能會傳回的一些較常見的錯誤值如下:

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

備註

如果先前安裝的備份驅動程式是針對裝置設定的,裝置的驅動程序復原會將目前安裝在裝置上的驅動程式取代為備份驅動程式。 Windows 最多會維護裝置的一個備份驅動程式。 Windows 會在裝置上成功安裝驅動程式之後,立即將驅動程式設定為裝置的備份驅動程式,而 Windows 會判斷裝置是否正常運作。 不過,如果驅動程式未成功安裝在裝置上,或裝置在安裝之後無法正常運作,Windows 就不會將驅動程式設定為裝置的備份驅動程式。 如需驅動程序復原的詳細資訊,請參閱說明與支援中心 裝置管理員的相關信息。

如果指定的裝置有備份驅動程式, DiRollbackDriver 會執行下列作業:

  1. 如果 Flags 設定為零, DiRollbackDriver 會提示使用者確認是否應該安裝備份驅動程式。 否則,如果 Flags 設定為 ROLLBACK_FLAG_NO_UI,DiRollbackDriver 會安裝備份驅動程式,而不提示使用者確認備份驅動程序的安裝。
  2. DiRollbackDriver 會安裝備份驅動程式。 驅動程式是否已比目前安裝在裝置上的驅動程式更符合備份驅動程式。
  3. 如果備份驅動程式所取代的驅動程式不是收件匣驅動程式,而且未安裝在系統中的任何其他裝置上, DiRollbackDriver 就會從系統中移除驅動程式。 DiRollbackDriver 會從系統移除驅動程式,因為它假設使用者只有在驅動程式發生問題時,才會取代驅動程式。
如果指定的裝置沒有備份驅動程式, DiRollbackDriver 會呼叫 SetLastError 來設定錯誤ERROR_NO_MORE_ITEMS,不會移除目前安裝的驅動程式,並傳回 FALSE

一般而言,安裝應用程式應該將 NeedReboot 設定為 NULL ,以便在需要重新啟動才能完成復原時,系統會自動起始系統重新啟動。 應用程式應該只在下列情況下提供 NeedReboot 指標:

  • 應用程式必須呼叫 DiRollbackDriver 數次才能完成安裝。 在此情況下,應用程式應該記錄對 DiRollbackDriver 的任何呼叫是否傳回 TRUENeedReboot 值,如果是的話,請在最後呼叫 DiRollbackDriver 之後提示使用者重新啟動系統。
  • 應用程式必須在系統重新啟動之前執行必要的作業,而不是呼叫 DiRollbackDriver。 如果需要系統重新啟動,應用程式應該完成必要的作業,然後提示使用者重新啟動系統。
若要為裝置安裝新的驅動程式,而不是復原裝置的驅動程式,請呼叫 DiInstallDriverUpdateDriverForPlugAndPlayDevices

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 中使用。
目標平台 桌面
標頭 newdev.h (包括 Newdev.h)
程式庫 Newdev.lib
Dll Newdev.dll

另請參閱

DiInstallDriver

UpdateDriverForPlugAndPlayDevices