共用方式為


VSS 下的登錄備份和還原作業

Windows 登錄服務支援 VSS 寫入器,稱為登錄寫入器,可讓要求者使用儲存在陰影複製磁碟區上的數據來備份系統登錄。 如需登錄寫入器的詳細資訊,請參閱 Box VSS寫入器

登錄寫入器會執行就地備份和還原登錄。 此外,登錄寫入器只會報告系統 Hives;它不會報告使用者 Hives。

Windows Server 2003: 登錄寫入器會使用中繼存放庫檔案(也稱為吐出檔案)來儲存登錄數據。 此外,登錄寫入器會報告系統 Hives 和使用者 Hives。

登錄寫入器的寫入器標識碼為 AFBAB4A2-367D-4D15-A586-71DBB18F8485。

Windows XP: 沒有登錄寫入器。 登錄數據是由可開機狀態寫入器所報告,其寫入器標識碼為 F2436E37-09F5-41AF-9B2A-4CA2435DBFD5。

注意

Microsoft不提供在 Windows 上實作在線系統狀態還原的開發人員或 IT 專業技術支援(所有版本)。 

注意

下列資訊僅適用於 Windows Server 2003 和 Windows XP。

 

使用 VSS 的登錄備份

登錄寫入器會在系統\CurrentControlSet\控件\hivelist HKEY_LOCAL_MACHINE密鑰所\定義的位置匯出並儲存使用中登錄檔案。

此登錄專案下的值名稱會識別要儲存的登錄區,而值的數據會提供包含檔案的檔案(hive 檔案)。 Hive 檔案會以下列格式指定:\Device\HarddiskVolumeX\路徑\檔名。

例如,在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\hivelist,您可能會看到 \REGISTRY\MACHINE\SOFTWARE = \Device\HarddiskVolume1\Windows\System32\config\SOFTWARE。

登錄寫入器可確保Hive檔案在陰影複製之前儲存到磁碟。

備份登錄區時,要求者會將 \Device\HarddiskVolumeX 取代為磁碟區陰影複製的裝置物件字串。

注意

您可以使用 QueryDosDevice 函式,將 \Device\HarddiskVolumeX 路徑轉換成對等的 Win32 路徑。 如需詳細資訊,請參閱 從檔句柄 取得檔名或 顯示磁碟區路徑名稱

 

使用非 VSS Win32 API 還原登錄

注意

Windows Server 2016 和更新版本不支援登錄還原。

針對在線(安全模式或完整操作系統)還原,必須保留HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\控件\會話管理員\PendingFileRenameOperations 登錄機碼中的子機碼。

MoveFileEx MoveFileTransacted 函式會使用此登錄機碼來儲存使用 dwFlags 參數中MOVEFILE_DELAY_UNTIL_REBOOT值重新命名之檔案的相關信息。

若要保留 PendingFileRenameOperations 登錄機碼的內容,備份應用程式應該呼叫 RegLoadKey 函式,將登錄檔連線到作用中登錄。 接著,備份應用程式可以使用各種登錄功能,將所需的密鑰和值複製到載入的 Hive。 複製完成之後,應該呼叫 RegFlushKey RegUnloadKey 函式。

針對離線 (Windows Recovery Environment 或 Windows PE) 還原,不需要接受 PendingFileRenameOperations 登入機碼。

在 Windows Server 2003 中使用非 VSS Win32 API 進行登錄還原

注意

下列資訊僅適用於在 Windows Server 2003 中執行的災害復原相關還原作業(也稱為裸機復原)。

 

還原登錄時,備份應用程式必須將某些子機碼從目前的登錄移至要還原的登錄中。

若要這樣做,備份應用程式可以呼叫 RegLoadKey ,將登錄檔連線到目前作用中的登錄。 然後,它可以使用各種登錄功能,將所需的金鑰和值複製到載入的 Hive。 複製完成之後, 會呼叫 RegFlushKeyRegUnloadKey

有一個登錄機碼會指示還原應用程式 (要求者) HKEY_LOCAL_MACHINE\SYSTEM 下的登錄機碼,在還原時不應覆寫:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\BackupRestore\KeysNotToRestore

系統狀態還原程式的一部分牽涉到還原先前備份的登錄。

備份應用程式在還原 HKEY_LOCAL_MACHINE\SYSTEM Hive 時需要特別小心,因為安裝 Windows 操作系統暫存版本的程式會在新安裝的系統 Hive 中建立密鑰,其值必須維持還原作業。

例如,當更換系統有不同於原始系統的網路介面卡時,還原前一張卡片的原始密鑰會導致無法預測的結果。 這是因為 隨插即用 服務偵測到適當的服務和驅動程式登錄專案並放入登錄中。 這些值必須保留,才能在系統還原之後正確開機。

本節說明備份應用程式在執行還原 HKEY_LOCAL_MACHINE\SYSTEM hive 時,如何探索要保留哪些密鑰和檔案。 在某些情況下,這會牽涉到以程序設計方式將密鑰從新安裝的安裝 Hive 複製到要還原的 Hive。 在其他情況下,確保不會取代產品的登錄機碼,就像在產品的 INF 組態檔中指定這類機碼一樣簡單。

要保留的 索引鍵(和索引鍵數據)會列舉在 下的 HKEY_LOCAL_MACHINE\SYSTEM hive 中

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore\KeysNotToRestore

key 作為一組REG_MULTI_SZ字串(在本檔中稱為 索引鍵字串 )。

備份應用程式(要求者)必須在使用中登錄和新還原的登錄中檢查這些機碼的值,因為任何應用程式或服務隨時都可以新增值。

備份應用程式如何解譯索引鍵字串,取決於其終端字元:

  1. 以反斜杠終止的索引鍵字串會解譯為子機碼。 遇到這類子字串時,備份應用程式必須保留所有數據和所有次級密鑰。

    例如,下列指定所有次級索引鍵和數據都會在整個還原作業中保留:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dmio\boot info\

    為此,此機碼和所有次級機碼和數據都必須從現有的登錄複製(也就是 Windows 安裝所建立的機碼)複製到新還原的登錄中。 這稱為 金鑰取代 作業。 這項作業會取代還原登錄中的對應機碼。

  2. 終止字元為星號 ('*') 的索引鍵字串會指定所有子機碼都應該合併。 例如,索引鍵字串:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\*

    指定現有登錄中的服務機碼(例如 Windows 安裝所建立的服務機碼)必須合併到還原的登錄中。 這稱為 金鑰合併 作業,如果現有 Hive 和已還原的 Hive 中有子機碼,則還原目錄中的密鑰會保留下列例外狀況:

    • 如果現有Hive中的子機碼包含名為 「start」 的值,且還原中的子機碼不會。
    • 如果現有和已還原Hive中的子機碼包含名為 「start」 的值,且現有Hive中的數值較少。

    登錄中的 「start」 值會指定服務或驅動程式何時啟動,而且可以有 0-4 的數值。 值越低,服務將會啟動的開機程式中越早。

    如果此機碼同時存在於現有和還原的目錄中,您必須檢查每個 Hive 中啟動機碼的值。 如果現有Hive中的值低於還原目錄中的值,則必須保留較低的值。

    再次使用此金鑰來判斷服務或驅動程序是要在開機時間、系統時間、手動、自動或停用。 較低的值代表較早的開始時間。 先前的開始時間必須套用至新的登錄,以確保服務或驅動程式在下一次開機時已正確啟動。

  3. 終止字元不是反斜杠或星號的索引鍵字串,會解譯為要保留的登錄值。

    例如,索引鍵字串:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

    可透過程序設計方式保留密鑰的機制牽涉到 Win32 登錄 API。 例如,以下列舉了一個演算法:

    1. 將備份的系統 Hive 檔案還原至檔案。 在此範例中,讓名稱System.reg。

    2. 使用 RegLoadKey 將System.reg載入暫 存名稱下的HKEY_LOCAL_MACHINE 。 例如,其中一個這類名稱可能是

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

    3. 從登錄複本列舉 KeysNotToRestore 子機碼中的值,並建立清單的超集。 從現有的複製每個這類金鑰

      HKEY_LOCAL_MACHINE\SYSTEM

      索引鍵進入

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

      根據上述語意的索引鍵。

    4. 完成時,請使用 RegFlushKey 和 RegUnloadKey 進入點來儲存

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

      鍵回到System.reg。

    5. 最後,使用 RegReplaceKey 指定System.reg取代

      HKEY_LOCAL_MACHINE\SYSTEM

      Hive 檔案,SYSTEM。