无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: lxl1638
打印 上一主题 下一主题

[新版V1.5.2024.928]WimTool -- Wim文件的图形视窗处理工具[无忧首发]

    [复制链接]
1771#
 楼主| 发表于 2008-11-30 11:57:47 | 只看该作者
原帖由 nn2nn 于 2008-11-30 11:40 发表
谢谢你提供的资料  !

这个我写好了,就是要花点时间.


http://www.delphipraxis.net/topic48444.html


{-----------------------------------------------------------------------------
Unit Name: uSimpleTrustCheck
Author:    ACE-ppc
Date:      04-Apr-2005
Purpose:   Unit for simple check if a file is Trusted
History:   V1.0: Erste Version
            v1.1: Speicher Leaks beseitigt, WINTRUST_DATA Struktur angepasst                  
-----------------------------------------------------------------------------}

unit uSimpleTrustCheck;

interface

function CheckFileTrust(const sFilename: string): Boolean;

implementation

uses
  Windows,
  SysUtils;

const
  //Kostanten für die dwUnionChoice in WINTRUST_DATA
  WTD_CHOICE_FILE             = 1;
  WTD_CHOICE_CATALOG          = 2;

  //Konstanten für dwStateAction
  WTD_STATEACTION_IGNORE      = 0;
  WTD_STATEACTION_VERIFY      = 1;

  //UI Konstanten für WINTRUST_DATA
  WTD_UI_NONE                 = 2;                //kein UI anzeigen

  //Konstanten zur Prüfung auf zurückgezogene Zertifikate
  WTD_REVOKE_NONE             = 0;                // keine zusätzliche Prüfun

  //Konstanten für TrustProvider
  WTD_SAFER_FLAG              = 256;              // für Winxp Sp2 benötigt

  //Wintrust Action GUID´s
  WINTRUST_ACTION_GENERIC_VERIFY_V2: TGUID = '{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}';

type

  CATALOG_INFO = record
    cbStruct: DWORD;                              // = sizeof(WINTRUST_CATALOG_INFO)
    sCatalogFile: array[0..MAX_PATH] of WCHAR;    // Dateiname incl. Pfad zur CAT Datei
  end;
  PCATALOG_INFO = ^CATALOG_INFO;

  WINTRUST_CATALOG_INFO = record
    cbStruct: DWORD;                              // = sizeof(WINTRUST_CATALOG_INFO)
    dwCatalogVersion: DWORD;                      // optional
    pcwszCatalogFilePath: LPCWSTR;                // benötigt, Dateiname incl. Pfad zur CAT Datei
    pcwszMemberTag: LPCWSTR;                      // benötigt, tag zum Mitglied im Katalog
    pcwszMemberFilePath: LPCWSTR;                 // benötigt, Dateiname incl. Pfad
    hMemberFile: THANDLE;                         // optional
  end;
  PWINTRUST_CATALOG_INFO = ^WINTRUST_CATALOG_INFO;

  WINTRUST_FILE_INFO = record
    cbStruct: DWORD;                              // = sizeof(WINTRUST_FILE_INFO)
    pcwszFilePath: LPCWSTR;                       // benötigt, Dateiname incl. Pfad
    pgKnownSubject: PGUID;                        // optional
    hFile: THANDLE;                               // optional
  end;
  PWINTRUST_FILE_INFO = ^WINTRUST_FILE_INFO;

  WINTRUST_DATA = packed record
    cbStruct: DWORD;                              // = sizeof(WINTRUST_DATA)
    pPolicyCallbackData: pointer;                 // optional - auf 0 setzen
    pSIPClientData: pointer;                      // optional - auf 0 setzen
    dwUIChoice: DWORD;                            // benötigt, UI auswahl
    fdwRevocationChecks: DWORD;                   // benötigt, auf zurückgezogene Zertifikate prüfen (online ben.)
    dwUnionChoice: DWORD;                         // benötigt, welche Datenstruktur soll verwendet werden
    pWTDINFO: pointer;                            // Pointer zu einer der Wintrust_X_Info Strukturen
    pFake: pointer;                               //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
    pFake1: pointer;                              //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
    pFake2: pointer;                              //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
    pFake3: pointer;                              //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
    dwStateAction: DWORD;
    hWVTStateData: THANDLE;
    pwszURLReference: PWChar;
    dwProvFlags: DWORD;
    dwUIContext: DWORD;
  end;
  PWINTRUST_DATA = ^WINTRUST_DATA;

  //Handle und Pointer auf KatalogAdminKontext
  HCatAdmin = THANDLE;
  PHCatAdmin = ^HCatAdmin;

var
  hLibWintrust : THANDLE;

  //dynamische Dll Aufrufe - keine Statische einbindung möglich
  CryptCATAdminAcquireContext : function(PHCatAdmin: PHCatAdmin; pgSubsystem: PGUID; dwFlags: DWORD): BOOL; stdcall;
  CryptCATAdminReleaseContext : function(HCatAdmin: HCatAdmin; dwFlags: DWORD): BOOL; stdcall;
  CryptCATAdminCalcHashFromFileHandle: function(hFile: THANDLE; pHashSize: PDWORD; pbHash: PByteArray; dwFlags: DWORD): BOOL; stdcall;
  CryptCATAdminEnumCatalogFromHash: function(HCatAdmin: HCatAdmin; pbHash: PByteArray; pHashSize: DWORD; dwFlags: DWORD; phPrevCatInfo: PHandle): THANDLE; stdcall;
  CryptCATCatalogInfoFromContext: function(hCatInfo: THANDLE; psCatInfo: PCATALOG_INFO; dwFlags: DWORD): BOOL; stdcall;
  CryptCATAdminReleaseCatalogContext: function(HCatAdmin: HCatAdmin; hCatInfo: THANDLE; dwFlags: DWORD): BOOL; stdcall;
  WinVerifyTrust: function(hwnd: THANDLE; pgActionID: PGUID; pWintrustData: PWINTRUST_DATA): Longint; stdcall;

{-----------------------------------------------------------------------------
  Funcktion:   CheckFileTrust
  Date:        02-Mrz-2005
  Arguments:   const sFilename: string
  Result:      Boolean
  Description: Prüft ob die angegebene Datei Trusted ist
-----------------------------------------------------------------------------}
function CheckFileTrust(const sFilename: string): Boolean;
var
  //Byte Array  und Counter
  aByteHash                   : array[0..255] of Byte;
  iByteCount                  : Integer;

  hCatAdminContext            : HCatAdmin;
  WTrustData                  : WINTRUST_DATA;
  WTDCatalogInfo              : WINTRUST_CATALOG_INFO;
  WTDFileInfo                 : WINTRUST_FILE_INFO;
  CatalogInfo                 : CATALOG_INFO;

  hFile                       : THANDLE;
  hCatalogContext             : THANDLE;

  swFilename                  : WideString;
  swMemberTag                 : WideString;

  ilRet                       : Longint;
  x                           : Integer;

begin

  //Standard Result setzen
  Result := False;

  //Sicherheitsabfrage ob Datei existiert
  if FileExists(sFilename) = False then Exit;

  //String in Widestring wandeln
  swFilename := sFilename;

  ZeroMemory(@CatalogInfo, SizeOf(CatalogInfo));
  ZeroMemory(@WTDFileInfo, SizeOf(WTDFileInfo));
  ZeroMemory(@WTDCatalogInfo, SizeOf(WTDCatalogInfo));
  ZeroMemory(@WTrustData, SizeOf(WTrustData));

  //Catalog Admin Kontext öffnen und falls nicht möglich Prozedur verlassen
  if CryptCATAdminAcquireContext(@hCatAdminContext, nil, 0) = False then Exit;

  //Filehandle auf die zu prüfende Datei holen
  hFile := CreateFile(PChar(string(sFilename)),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

  //Wenn das Handle nicht erhalten wurde Prozedur verlassen
  if hFile = INVALID_HANDLE_VALUE then Exit;

  //iaBytescount nach größe des Arrays setzen
  iByteCount := SizeOf(aByteHash);

  //ByteArray mit Hash füllen lassen und die Größe in iByteCount bekommen
  CryptCATAdminCalcHashFromFileHandle(hFile, @iByteCount, @aByteHash, 0);

  // MemberTag brechnen  (vom ByteArray auf HEX)
  for x := 0 to iByteCount - 1 do
  begin
    swMemberTag := swMemberTag + IntToHex(aByteHash[x], 2);
  end;

  //FileHandle schließen - wird nicht mehr gebraucht
  CloseHandle(hFile);

  //Erste Prüfung erfolgt mit WINTRUST_DATA.dwUnionChoice := WTD_CHOICE_CATALOG;
  //also muss WINTRUST_CATALOG_INFO gefüllt werden
  //
  //Handle auf den Katalog Kontext holen
  hCatalogContext := CryptCATAdminEnumCatalogFromHash(hCatAdminContext, @aByteHash, iByteCount, 0, nil);

  //Wenn das Handle 0 ist muss die Prüfung mit der
  //WINTRUST_DATA.dwUnionChoice := WTD_CHOICE_FILE; Struktur durchgeführt werden
  if hCatalogContext = 0 then
  begin
    //CatalogContext = 0 also
    //
    //WINTRUST_FILE_INFO Struktur initialisieren und füllen
    WTDFileInfo.cbStruct := SizeOf(WTDFileInfo);
    WTDFileInfo.pcwszFilePath := PWideChar(swFilename);
    WTDFileInfo.pgKnownSubject := nil;
    WTDFileInfo.hFile := 0;

    //WINTRUST_DATA Struktur initialisieren und füllen
    WTrustData.cbStruct := SizeOf(WTrustData);
    WTrustData.dwUnionChoice := WTD_CHOICE_FILE; //WINTRUST_FILE_INFO Struktur wählen
    WTrustData.pWTDINFO := @WTDFileInfo;        //Pointer zu WINTRUST_FILE_INFO
    WTrustData.dwUIChoice := WTD_UI_NONE;
    WTrustData.fdwRevocationChecks := WTD_REVOKE_NONE;
    WTrustData.dwStateAction := WTD_STATEACTION_IGNORE;
    WTrustData.dwProvFlags := WTD_SAFER_FLAG;   //UI bei XP SP2 unterbinden
    WTrustData.hWVTStateData := 0;
    WTrustData.pwszURLReference := nil;
  end
  else
  begin
    //CatalogContext <> 0 also CATALOG_INFO benutzen
    //
    //CATALOG_INFO Struktur füllen
    CryptCATCatalogInfoFromContext(hCatalogContext, @CatalogInfo, 0);

    //WINTRUST_CATALOG_INFO Struktur initialisieren und füllen
    WTDCatalogInfo.cbStruct := SizeOf(WTDCatalogInfo);
    WTDCatalogInfo.pcwszCatalogFilePath := CatalogInfo.sCatalogFile;
    WTDCatalogInfo.pcwszMemberFilePath := PWideChar(swFilename);
    WTDCatalogInfo.pcwszMemberTag := PWideChar(swMemberTag);

    //WINTRUST_DATA Struktur initialisieren und füllen
    WTrustData.cbStruct := SizeOf(WTrustData);
    WTrustData.dwUnionChoice := WTD_CHOICE_CATALOG; //WINTRUST_CATALOG_INFO Struktur w&auml;hlen
    WTrustData.pWTDINFO := @WTDCatalogInfo;     //Pointer zu WINTRUST_CATALOG_INFO
    WTrustData.dwUIChoice := WTD_UI_NONE;
    WTrustData.fdwRevocationChecks := WTD_REVOKE_NONE;
    WTrustData.pPolicyCallbackData := nil;
    WTrustData.pSIPClientData := nil;
    WTrustData.dwStateAction := WTD_STATEACTION_VERIFY;
    WTrustData.dwProvFlags := 0;                //WTD_SAFER_FLAG;   //UI bei XP SP2 unterbinden
    WTrustData.hWVTStateData := 0;
    WTrustData.pwszURLReference := nil;
  end;

  //WinVerifyTrust aufrufen um die Prüfung durchzuführen
  ilRet := WinVerifyTrust(INVALID_HANDLE_VALUE, @WINTRUST_ACTION_GENERIC_VERIFY_V2, @WTrustData);

  //Wenn Erg. 0 ist dann ist das File Trusted - alle anderen Werte sind Fehlercodes
  if ilRet = 0 then
  begin
    Result := True
  end
  else
    Result := False;

  //Handle zum Catalogfile schlie&szlig;en
  CryptCATAdminReleaseCatalogContext(hCatAdminContext, hCatalogContext, 0);

  //Catalog Admin Kontext schlie&szlig;en
  CryptCATAdminReleaseContext(hCatAdminContext, 0);
end;

initialization
  //Dynamisches laden der Dll und deren Funktionen
  hLibWintrust := LoadLibrary('wintrust.dll');
  if hLibWintrust >= 32 then { success }
  begin
    CryptCATAdminAcquireContext := GetProcAddress(hLibWintrust, 'CryptCATAdminAcquireContext');
    CryptCATAdminReleaseContext := GetProcAddress(hLibWintrust, 'CryptCATAdminReleaseContext');
    CryptCATAdminCalcHashFromFileHandle := GetProcAddress(hLibWintrust, 'CryptCATAdminCalcHashFromFileHandle');
    CryptCATAdminEnumCatalogFromHash := GetProcAddress(hLibWintrust, 'CryptCATAdminEnumCatalogFromHash');
    CryptCATCatalogInfoFromContext := GetProcAddress(hLibWintrust, 'CryptCATCatalogInfoFromContext');
    CryptCATAdminReleaseCatalogContext := GetProcAddress(hLibWintrust, 'CryptCATAdminReleaseCatalogContext');
    WinVerifyTrust := GetProcAddress(hLibWintrust, 'WinVerifyTrust');
  end;

finalization
  FreeLibrary(hLibWintrust);
end.


[ 本帖最后由 lxl1638 于 2008-11-30 17:25 编辑 ]
回复

使用道具 举报

1772#
发表于 2008-11-30 15:54:33 | 只看该作者
我的XP SP3系统在挂OP.WIM时出现蓝屏,显示是NTFS.SYS出错,不知是什么原因?
回复

使用道具 举报

1773#
发表于 2008-11-30 20:25:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1774#
 楼主| 发表于 2008-11-30 23:23:50 | 只看该作者
原帖由 nn2nn 于 2008-11-30 20:25 发表
测试通过,测试通过,测试通过!


又有大作了?什么时候发上了试试?
回复

使用道具 举报

1775#
发表于 2008-12-1 16:38:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1776#
发表于 2008-12-5 10:15:24 | 只看该作者
下载了最新的WimTool-V1.0.8.0316,谢谢分享
回复

使用道具 举报

1777#
发表于 2008-12-5 13:01:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1778#
发表于 2008-12-5 13:01:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1779#
 楼主| 发表于 2008-12-5 19:17:34 | 只看该作者
原帖由 nn2nn 于 2008-12-5 13:01 发表
请教lxl1638

c:\windows\system32\config\system   
c:\windows\system32\config\software   
c:\windows\system32\config\sam   
c:\windows\system32\config\security   
c:\windows\system32\config ...


网上有注册表备份工具,也有些工具带有源码的,你下载来看看。

正常系统中注册表文件是独占文件,一般无法读取,更加无法直接复盖恢复,
如果实在需要在正常系统中备份(复制)注册表文件的源码,本人可以给你提供,但没有试验其正确性。
-------另,网上有些在XP下备份(复制)注册表文件的工具或源码在2K3以上系统中无法使用。
回复

使用道具 举报

1780#
发表于 2008-12-5 19:19:19 | 只看该作者
hklm\hardware在什么地方?
回复

使用道具 举报

1781#
 楼主| 发表于 2008-12-5 19:24:26 | 只看该作者
另,WIMGAPI.H后面有几个结构和函数好象是用以热备份支持的,微软的文档没有这几个函数的详细说明(也可能是本人没有找到),从函数名来看是设置WIMGAPI读取文件的回调函数,只要能解决读取系统独占文件的问题,就能支持热备份了,如果你有空可以试试。本人现在在玩Delphi-KOL。
回复

使用道具 举报

1782#
 楼主| 发表于 2008-12-5 19:25:50 | 只看该作者
原帖由 yichya 于 2008-12-5 19:19 发表
hklm\hardware在什么地方?


system 吧。。。。。。。。。。。。。。。。
回复

使用道具 举报

1783#
发表于 2008-12-5 20:35:18 | 只看该作者
备份注册表的例子 (From strarc):
  1. void
  2. CreateRegistrySnapshots()
  3. {
  4.   HKEY hKeyHiveList;
  5.   LONG lRegErr;

  6.   lRegErr = RegOpenKey(HKEY_LOCAL_MACHINE,
  7.                L"SYSTEM\\CurrentControlSet\\Control\\hivelist",
  8.                &hKeyHiveList);

  9.   if (lRegErr != ERROR_SUCCESS)
  10.     {
  11.       WErrMsgA errmsg(lRegErr);
  12.       oem_printf(stderr,
  13.          "Error getting registry hive list: %1%%n"
  14.          "No registry snapshots will be backed up.%%n", errmsg);
  15.       return;
  16.     }

  17.   LPWSTR wczKeyName = (LPWSTR) Buffer;
  18.   DWORD dwKeyNameSize = 32767;
  19.   LPWSTR wczFileName = wczFullPathBuffer;
  20.   DWORD dwFileNameSize = 32767 -
  21.     sizeof(wczFullPathBuffer) / sizeof(*wczFullPathBuffer);

  22.   DWORD dwIndex = 0;

  23.   for(;;)
  24.     {
  25.       Sleep(0);

  26.       DWORD dwKeyNameReturnedSize = dwKeyNameSize;
  27.       DWORD dwFileNameReturnedSize = dwFileNameSize -
  28.     sizeof(REGISTRY_SNAPSHOT_FILE_EXTENSION) /
  29.     sizeof(*REGISTRY_SNAPSHOT_FILE_EXTENSION);
  30.       DWORD dwReturnedDataType;

  31.       lRegErr = RegEnumValue(hKeyHiveList,
  32.                  dwIndex++,
  33.                  wczKeyName,
  34.                  &dwKeyNameReturnedSize,
  35.                  NULL,
  36.                  &dwReturnedDataType,
  37.                  (LPBYTE) wczFileName,
  38.                  &dwFileNameReturnedSize);

  39.       if (lRegErr == ERROR_NO_MORE_ITEMS)
  40.     break;

  41.       if ((lRegErr != ERROR_SUCCESS) & (lRegErr != ERROR_MORE_DATA))
  42.     {
  43.       WErrMsgA errmsg(lRegErr);
  44.       oem_printf(stderr,
  45.              "Error getting registry hive list: %1%%n"
  46.              "Some of the snapshots will not be backed up.%%n",
  47.              errmsg);

  48.       break;
  49.     }

  50.       if (dwReturnedDataType != REG_SZ)
  51.     {
  52.       oem_printf(stderr,
  53.              "Wrong data type %1!u! for hive %2!ws!. "
  54.              "Should be %3!u!. This hive will not be backed up.%%n",
  55.              dwReturnedDataType, wczKeyName, REG_SZ);

  56.       continue;
  57.     }

  58.       if (*wczFileName == 0)
  59.     continue;

  60.       wcscat(wczFileName, REGISTRY_SNAPSHOT_FILE_EXTENSION);

  61.       if (bVerbose)
  62.     oem_printf(stderr, "'%1!ws!' -> '%2!ws!'%%n", wczKeyName, wczFileName);
  63.       else if (bListFiles)
  64.     oem_printf(stdout, "%1!ws!%%n", wczKeyName);

  65.       NTSTATUS status;
  66.       IO_STATUS_BLOCK io_status;
  67.       UNICODE_STRING name;
  68.       OBJECT_ATTRIBUTES object_attributes;
  69.       HANDLE hKey;
  70.       HANDLE hFile;

  71.       RtlInitUnicodeString(&name, wczKeyName);
  72.       InitializeObjectAttributes(&object_attributes,
  73.                  &name,
  74.                  OBJ_CASE_INSENSITIVE | OBJ_OPENIF,
  75.                  NULL,
  76.                  NULL);

  77.       status = NtCreateKey(&hKey,
  78.                KEY_READ,
  79.                &object_attributes,
  80.                0,
  81.                NULL,
  82.                REG_OPTION_BACKUP_RESTORE,
  83.                NULL);

  84.       if (!NT_SUCCESS(status))
  85.     {
  86.       WNTErrMsgA errmsg(status);
  87.       oem_printf(stderr, "Error opening key '%1!ws!': %2%%n",
  88.              wczKeyName, errmsg);

  89.       continue;
  90.     }

  91.       RtlInitUnicodeString(&name, wczFileName);
  92.       InitializeObjectAttributes(&object_attributes,
  93.                  &name,
  94.                  OBJ_CASE_INSENSITIVE | OBJ_OPENIF,
  95.                  NULL,
  96.                  NULL);

  97.       status = NtCreateFile(&hFile,
  98.                 GENERIC_WRITE | SYNCHRONIZE,
  99.                 &object_attributes,
  100.                 &io_status,
  101.                 NULL,
  102.                 FILE_ATTRIBUTE_NORMAL,
  103.                 0,
  104.                 FILE_SUPERSEDE,
  105.                 FILE_NON_DIRECTORY_FILE |
  106.                 FILE_SYNCHRONOUS_IO_NONALERT,
  107.                 NULL,
  108.                 0);

  109.       if (!NT_SUCCESS(status))
  110.     {
  111.       NtClose(hKey);

  112.       WNTErrMsgA errmsg(status);
  113.       oem_printf(stderr, "Error creating file '%1!ws!': %2%%n",
  114.              wczFileName, errmsg);

  115.       continue;
  116.     }

  117.       status = NtSaveKey(hKey, hFile);

  118.       NtClose(hKey);
  119.       NtClose(hFile);

  120.       if (!NT_SUCCESS(status))
  121.     {
  122.       WNTErrMsgA errmsg(status);
  123.       oem_printf(stderr, "Error creating snapshot for '%1!ws!': %2%%n",
  124.              wczKeyName, errmsg);

  125.       continue;
  126.     }
  127.     }

  128.   RegCloseKey(hKeyHiveList);
  129. }
复制代码

[ 本帖最后由 yuanlixg 于 2008-12-5 20:39 编辑 ]
回复

使用道具 举报

1784#
 楼主| 发表于 2008-12-5 21:20:28 | 只看该作者
原帖由 yuanlixg 于 2008-12-5 20:35 发表
备份注册表的例子 (From strarc):void
CreateRegistrySnapshots()
{
  HKEY hKeyHiveList;
  LONG lRegErr;

  lRegErr = RegOpenKey(HKEY_LOCAL_MACHINE,
               L"SYSTEM\\CurrentControlSet ...


本人前面所说的是以文件的形式整体备份,不是一项一项读取来备份。
如将整个 C:\WINDOWS\system32\config\SYSTEM 复制备份。
回复

使用道具 举报

1785#
发表于 2008-12-5 21:27:12 | 只看该作者
那时取系统挂接得多个表,SYSTEM、software、default、SAM、SECURITY等,
不是一项一项的备份。
回复

使用道具 举报

1786#
发表于 2008-12-5 21:33:54 | 只看该作者
看表:


  1. Windows Registry Editor Version 5.00

  2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist]
  3. "\\REGISTRY\\MACHINE\\HARDWARE"=""
  4. "\\REGISTRY\\MACHINE\\SECURITY"="\\Device\\HarddiskVolume3\\WINNT\\system32\\config\\SECURITY"
  5. "\\REGISTRY\\MACHINE\\SOFTWARE"="\\Device\\HarddiskVolume3\\WINNT\\system32\\config\\software"
  6. "\\REGISTRY\\MACHINE\\SYSTEM"="\\Device\\HarddiskVolume3\\WINNT\\system32\\config\\system"
  7. "\\REGISTRY\\USER\\.DEFAULT"="\\Device\\HarddiskVolume3\\WINNT\\system32\\config\\default"
  8. "\\REGISTRY\\MACHINE\\SAM"="\\Device\\HarddiskVolume3\\WINNT\\system32\\config\\SAM"
  9. "\\REGISTRY\\USER\\S-1-5-21-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxx-1001"="\\Device\\HarddiskVolume3\\Documents and Settings\\yuanlixg\\NTUSER.DAT"
  10. "\\REGISTRY\\USER\\S-1-5-21-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxx-1001_Classes"="\\Device\\HarddiskVolume3\\Documents and Settings\\yuanlixg\\Local Settings\\Application Data\\Microsoft\\Windows\\UsrClass.dat"
复制代码
回复

使用道具 举报

1787#
 楼主| 发表于 2008-12-5 22:24:31 | 只看该作者
本人明白你的意思,前面和nn2nn讨论的是基于文件备份,你这样是基于数据备份,枚举特定的项目和键值,以数据的形式备份。

基于数据方式的备份速度慢,基于文件的试备份可以达到很快的速度,即将几个注册表文件(在当前系统中)复制出来,以后以备在PE中恢复(若以WIM,可选择性地恢复指定的文件,如注册表和EXE、DLL等)。
回复

使用道具 举报

1788#
发表于 2008-12-5 22:27:33 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1789#
发表于 2008-12-5 22:32:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1790#
发表于 2008-12-5 22:36:11 | 只看该作者
你还没理解 注册表备份为什么要这么做,
注册表是不断变化的,要对其尽快一气取完,不然有完整性问题。
所以叫注册表快照。

后面的程序对 SYSTEM 等 也是一个一个文件备份的。
回复

使用道具 举报

1791#
 楼主| 发表于 2008-12-5 22:41:29 | 只看该作者
原帖由 nn2nn 于 2008-12-5 22:27 发表
我的工具是在PE下运行的,不存在"热"问题.


如果是在当前硬盘系统中就要考虑“热”的问题。
回复

使用道具 举报

1792#
发表于 2008-12-5 22:46:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1793#
发表于 2008-12-5 22:48:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1794#
发表于 2008-12-5 22:48:48 | 只看该作者
和命令行 "reg save"是一个原理。
回复

使用道具 举报

1795#
发表于 2008-12-5 22:49:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1796#
发表于 2008-12-5 22:52:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1797#
发表于 2008-12-5 23:13:21 | 只看该作者
有加快的办法,在ntfs分区先比较目录的日期,若相同,本目录不比。
子目录内还是要比较的。
回复

使用道具 举报

1798#
发表于 2008-12-5 23:18:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1799#
发表于 2008-12-5 23:40:22 | 只看该作者
我刻盘较多,一般用 where is it 存目录映像,要不然几百张 DVD 到哪儿找?
对本机用 where is it 建目录映像时存 CRC 值,到时用它一比就行了。
回复

使用道具 举报

1800#
发表于 2008-12-6 00:25:32 | 只看该作者
谢谢楼主! 正要改wim, 顶一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-22 15:51

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表