共用方式為


避免在裝置安裝和驅動程式更新期間重新開機系統

若要避免在裝置安裝期間重新開機系統,請使用下列規則:

  • 請勿在INF DDInstall 區段中使用RebootRestart專案。 這些指示詞原本是為了與 Windows 9x/Me 相容而提供,不應該用於 Windows 2000 和更新版本的 Windows。

  • 除非絕對必要,否則請勿搭配 INF CopyFiles 指示詞使用COPYFLG_FORCE_FILE_IN_USE或COPYFLG_REPLACE_BOOT_FILE旗標。

  • 從驅動程式存放區執行驅動程式套件中的所有檔案。

  • 如果驅動程式套件中的檔案不是從驅動程式存放區執行,請將新的檔案名指派給每個新版本的類別安裝程式或共同安裝程式或服務 DLL。 如果舊版正在使用中,這可避免系統重新開機的需求。 (事實上,如果更新的類別安裝程式或類別共同安裝程式未使用新的檔案名,這些新檔案將不會用於安裝。)

  • 若要更新裝置的驅動程式,請遵循更新 驅動程式檔案底下所列的規則。

更新檔案支援的驅動程式時,將重新開機降至最低

在Windows 10之前,所有核心模式驅動程式都受到系統的分頁檔案支援。 因此,即使在驅動程式執行時,磁片上仍可能會覆寫驅動程式二進位檔。

為了改善效能,從 Windows 10 開始,大部分的非開機啟動驅動程式會改為由磁片上的驅動程式二進位檔支援。

現在檔案支援的驅動程式啟動類型包括:

  • SERVICE_SYSTEM_START (0x00000001)

  • SERVICE_AUTO_START (0x00000002)

  • SERVICE_DEMAND_START (0x00000003)

開機啟動驅動程式會繼續受到分頁檔案的支援。

若要更新檔案支援的驅動程式,請使用下列最佳做法。 否則,更新可能需要重新開機兩次,一個需要取代檔案,另一個則會載入新版本的驅動程式。

如果您使用 INF 檔案,請遵循下列步驟:

  1. 修改驅動程式 INF 檔案的 CopyFiles 區段以使用 COPYFLG_IN_USE_RENAME,如下所示:

    [MyDriver_Install.NT]
    CopyFiles=MyDriverCopy
    
    [MyDriverCopy]
    MyDriver.sys,,,0x00004000  ; COPYFLG_IN_USE_RENAME
    

    如果您使用這個旗標,Windows 會嘗試取代磁片上的驅動程式檔案。 如需詳細資訊,請參閱 INF CopyFiles 指示詞

  2. 如果 INF 適用于 PnP 驅動程式,在裝置安裝期間,Windows 會嘗試卸載執行中的驅動程式,並重新啟動使用該驅動程式的裝置,以挑選新版本的驅動程式。 如果失敗,裝置安裝表示應該重新開機系統。

  3. 如果 INF 不適用於 PnP 驅動程式,而且您使用 InstallHInfSection 之類的方法來處理 INF,請手動停止並重新啟動驅動程式:

    • 關閉驅動程式的所有開啟控制碼,然後使用下列其中一種方法停止驅動程式:

      • sc.exe stop <mydriver>

      • ControlService (SERVICE_CONTROL_STOP)

      如需詳細資訊,請參閱 ControlService 函式

如果您未使用 INF 檔案,請使用下列步驟:

  1. 停止驅動程式,如上所述。 以新的檔案取代舊的驅動程式二進位檔案。

  2. 如果您無法停止驅動程式,請重新命名現有的檔案、將新檔案複製到原處,並設定未來要刪除的現有檔案 (例如,使用 MoveFileEx 搭配 MOVEFILE_DELAY_UNTIL_REBOOT 旗標) 。 若要開始使用新版本的驅動程式,系統必須重新開機。

檔案支援和分頁檔支援的區段

決定載入驅動程式的時機