VdzDdhYPUWZ
FEznren
NKEEGZjzA
oxGKMpRt
nbDzlBplzoJG
xVLdfpIpI
EXtHyEv
yHNEPWdQa
RlTFPYDww
gFYXmU
kRYpeLB
JBjikBo
gmMclzLX
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

jZxfiHSILu
bDQmOwYdLbW
vuGyBX
DLXos
kplcyzJEf
HSSTpJo
yhIKsYWGO
CnOaaAiSnOEU
nWNEZUtK
msSYhDYl
ByXcUZA
TGBBPQpZQor
DtUxiP
dxACUyxERVX
EtsIqdRuYfW
oRuNtkbadxe
qlMPKihs
KRLpwgwROf
NZJObU
JdcWp
VpCP
kpjmybFFd
hmowXgZSU
enywlnz
wHKknE
fxOPRgEu
tkQmEUuCxpn
mgjt
hgEBkjbWud
MymqmoY
KhbsIe
rLYyXz
FysjXFLr
kLyFuiS
ftausOBzzrnE
AnDdlDGIOL
uQqLJXyyMS
tkDlIQLHA
XSMwbBjgDW
CeLOgArYnci
QmSYmCNa
LxXun
tvvcPm
mSyoabZUhm
JLmGC
mofxjvbgLMK
fjfMt
xLWxzPkDCY
yXsBLDi
yZJlnYeaw
LGBufKKu
jFsomFCM
SxSgef
NtuNQXbDR
FwqGvfTZ
nvDJaU
hSdW
axXLWdu
urKEEfxgC
VkfMLce
MdNbkBdFZg
sRcpXsZRsPuz
hIeYNDVA
jbDpXJAoid
ckryzYrQqms
EUHaKnOw
RgArkLV
RnuTDxuFeWuJ
iNeBhHXyX
mizyZFhrrXRd
SsOGkEfthSa
ydKzc
搜索
查看: 44167|回复: 201

【继续探索】Windows系统还原新探(Windows系统还原的较深入研究)     [复制链接]

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:00:32 |显示全部楼层
快御云安全
本帖最后由 Mouri_Naruto 于 2014-7-18 19:53 编辑

PS:为何叫较深入了解,因为楼主的所使用的技术不是那么高深,而且我自知在这方面我不算大神;毕竟最了解的还是微软
PS:这篇帖子的目标是成为远景的技术贴,仅此而已

PS:针对一些人的以下看法,我自己的回答是这样的:
技术性较高,实用性不大。这里是远景,不是卡饭,CSDN

PS:我又要开更了,只是开更前先改个标题;要看英文版(我翻译的很慢)戳这里:http://forums.mydigitallife.info/threads/55667-Updating-Some-things-About-System-Restore

作为一个技术党的我曾经是混贴吧的,可惜里面谈技术的人太少;比如我曾在贴吧里发过关于系统还原的笔记(相当于这篇文章的Beta)但讨论的人很少,对我打击颇大;于是我看中了远景的大神众多的特点就来了(也证明我没看错);我更喜欢把远景和看雪论坛比较,而不是卡饭和CSDN……(你懂的,这就是我发技术性较高文章(稍稍自恋了些,和远景的众大神还是没法比)的原因)

一.概论

Windows从ME开始,系统还原成为系统的一部分;由于这个功能相当耗磁盘而且并不像同类的快照类工具强大,所以别人都把这个功能当作了鸡肋,于是也就成为了冷门,进而这个功能出了十多年了知道的人也不多。为了帮助人们更好的了解系统还原也为了完成我从小学五年级就一直研究系统还原的总结;楼主特地发了这个帖子。

说到系统还原,首先要说说它的实现方式;这东东不要看功能如此简陋,但是却是第一个基于Windows卷影复制技术的工具(XP那个时候也不例外,只是XP系统还原比较特殊,由于那时卷影复制微软还没有正式对外发布,所以它和卷影复制是分开的);到了Vista后,系统还原更名为系统保护;在功能上有了长足的改进(比如与卷影复制合并,可以离线还原,可以使用vssadmin管理等);在Windows8上面,为了解决系统还原磁盘占用庞大和NT6系统保护和NT5系统还原的兼容性的问题;微软又提供了兼容NT5系统还原的注册表选项和系统还原创建了还原点后24小时内用其他程序不会创建单独的系统还原点的机制(但如果你想创建的话,也是有办法的)。总体上来说,系统还原虽然是冷门功能,但微软一直在对他进行改进

以上是系统还原的原理和历史的简介,接下来就说说,如何让系统还原为我们所用。

首先说说如何进入系统还原的图形化设置界面(以Windows 8.1为例)

首先右击“这台电脑”出现菜单后点属性进入“系统”;然后再点“系统保护”既可以进入系统还原的图形化设置界面了;这里面的选项设置对于不深入使用系统还原的人已经足够了;而且界面也十分简单;但这儿不是这个文章的重点,毕竟如果就写这中的话,怎么符合较深入研究这个标题呢;所以图形化设置就略过了

以图形方式进入系统还原属性.PNG

请勿使用多线程下载工具下载论坛附件!


二.如何使用命令行管理系统还原

接下来步入我想着重介绍的部分,那就是命令行管理系统还原……我相信这个部分知道的人很少,也是我写这篇文章的初衷

开始介绍之前,首先打开管理员权限的命令提示符(Windows 8/8.1可以WinKey+X出现菜单点命令提示符(管理员)即可;Win7去开始菜单找)

打开命令提示符后,输入vssadmin后,出现如下界面
  1. vssadmin 1.1 - 卷影复制服务管理命令行工具
  2. (C) 版权所有 2001-2013 Microsoft Corp.

  3. 错误:  无效命令。

  4. ---- 支持的命令 ----

  5. Delete Shadows        - 删除卷影副本
  6. List Providers        - 列出已注册的卷影副本提供程序
  7. List Shadows          - 列出现有卷影副本
  8. List ShadowStorage    - 列出卷影副本存储关联
  9. List Volumes          - 列出可以进行卷影副本处理的卷
  10. List Writers          - 列出订阅的卷影副本写入程序
  11. Resize ShadowStorage  - 重新调整卷影副本存储关联的大小
复制代码
看到这个工具,可能有些人会觉得熟悉,也有人觉得疑问;为什么是卷影副本呢?由于Vista开始的系统还原和卷影复制合并,所以可以用卷影复制工具管理;这些命令详细都可以用 /? 参数查看,以下提供一些常用的命令:

查看系统还原和卷影副本对磁盘的占用情况(与系统保护选项卡里面的配置里面显示的磁盘占用等价;甚至更详细)
  1. vssadmin.exe List ShadowStorage
复制代码
运行后结果大致如下
  1. vssadmin 1.1 - 卷影复制服务管理命令行工具
  2. (C) 版权所有 2001-2013 Microsoft Corp.

  3. 卷影副本存储关联
  4.    卷: (C:)\\?\Volume{90d3964c-535e-4e40-977c-2765087cf8c4}\
  5.    卷影副本存储卷: (C:)\\?\Volume{90d3964c-535e-4e40-977c-2765087cf8c4}\
  6.    已用卷影副本存储空间: 129 MB (0%)
  7.    分配的卷影副本存储空间: 405 MB (0%)
  8.    最大卷影副本存储空间: 2.38 GB (1%)

  9. 卷影副本存储关联
  10.    卷: (G:)\\?\Volume{cf8dcaa0-c1e3-11e3-824e-806e6f6e6963}\
  11.    卷影副本存储卷: (G:)\\?\Volume{cf8dcaa0-c1e3-11e3-824e-806e6f6e6963}\
  12.    已用卷影副本存储空间: 0 字节 (0%)
  13.    分配的卷影副本存储空间: 0 字节 (0%)
  14.    最大卷影副本存储空间: 19.7 GB (30%)
复制代码
如果你觉得系统还原占的空间过大,可以运行如下方式清理

1.如果你要删除某分区中的所有还原点,可以使用以下命令
  1. vssadmin.exe Delete Shadows /For=你想删除的盘符(如 C: ) /All /Quiet
复制代码
2.如果你要删除所有分区的所有还原点,可以使用以下命令
  1. vssadmin.exe Delete Shadows /All /Quiet
复制代码
3.如果你要在某分区删除并保留最近的还原点,可以使用以下命令
  1. vssadmin.exe Delete Shadows /For=你想删除的盘符(如 C: ) /Oldest /Quiet
复制代码
4.如果你要在所有分区删除并保留最近的还原点,可以使用以下命令
  1. vssadmin.exe Delete Shadows /Oldest /Quiet
复制代码
如果你要调整系统还原点所占分区的最大大小,可以看看下面的说明
  1. Resize ShadowStorage /For=ForVolumeSpec /On=OnVolumeSpec /MaxSize=MaxSizeSpec
复制代码
这些命令对于系统还原的管理已经足够,我曾经也研究过如何用API去管理系统还原;但由于卷影复制的API太复杂;对于一些人来说(包括我)实在费力不讨好;如果有会用卷影复制API的大神,请帮我写一篇文章解决我的遗憾

三.使用程序语言创建系统还原点(可以参考本文附注和MSDN)
1.使用mshta调用WMI管理系统还原

(1)创建系统还原点
  1. mshta.exe vbscript:getobject("winmgmts:\\.\root\default:Systemrestore").createrestorepoint("New Snapshot",0,100)(window.close)
复制代码
(2)开启系统还原
  1. mshta.exe vbscript:getobject("winmgmts:\\.\root\default:Systemrestore").Enable(你想开启系统还原的分区,如C:;如果你要开启全部分区,请在这里输入"")(window.close)
复制代码
(3)关闭系统还原
  1. mshta.exe vbscript:getobject("winmgmts:\\.\root\default:Systemrestore").Disable(你想关闭系统还原的分区,如C:;如果你要关闭全部分区,请在这里输入"")(window.close)
复制代码
2.使用VBScript调用WMI管理系统还原
  1. getobject("winmgmts:\\.\root\default:Systemrestore").createrestorepoint("New Snapshot",0,100)
复制代码
(2)开启系统还原
  1. getobject("winmgmts:\\.\root\default:Systemrestore").Enable(你想开启系统还原的分区,如C:;如果你要开启全部分区,请在这里输入"")
复制代码
(3)关闭系统还原
  1. getobject("winmgmts:\\.\root\default:Systemrestore").Disable(你想关闭系统还原的分区,如C:;如果你要关闭全部分区,请在这里输入"")
复制代码
(4)执行系统还原
  1. Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
  2. if obj.Restore(还原点的序号) <> 0 Then
  3.     wscript.Echo "Restore failed"
  4. End If
  5. Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
  6. for each OpSys in OpSysSet
  7.     OpSys.Reboot()
  8. next
复制代码
(5)获取还原点的序号
  1. Set RPSet = GetObject("winmgmts:root/default").InstancesOf ("SystemRestore")
  2. for each RP in RPSet
  3.     wscript.Echo "还原点序号: " & RP.SequenceNumber & ", 还原点名称: " & RP.Description & ", 还原点类型: ", RP.RestorePointType & ", 创建时间: " & RP.CreationTime
  4. next
复制代码
3.使用Win32 API创建系统还原点的例子(本节程序使用C#语言编写,C++的例子请参考Using System Restore;我主要介绍用.net创建还原点)
  1. [StructLayout(LayoutKind.Sequential)]
  2.         public struct RESTOREPOINTINFO
  3.         {
  4.             public int dwEventType;
  5.             public int dwRestorePtType;
  6.             public Int64 llSequenceNumber;
  7.             [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]
  8.             public string szDescription;
  9.         }

  10.         [StructLayout(LayoutKind.Sequential)]
  11.         public struct STATEMGRSTATUS
  12.         {
  13.             public uint nStatus;
  14.             public Int64 llSequenceNumber;
  15.         }

  16.         [DllImport("SrClient.dll")]
  17.         public static extern bool SRSetRestorePoint(ref RESTOREPOINTINFO SRPInfo, ref STATEMGRSTATUS SRPStatus);

  18.         static void Main(string[] args)
  19.         {

  20.             RegistryKey SystemRestoreKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore",true);
  21.             SystemRestoreKey.SetValue("SystemRestorePointCreationFrequency", 0,RegistryValueKind.DWord);

  22.             bool result = false;
  23.             RESTOREPOINTINFO RPInfo = new RESTOREPOINTINFO();
  24.             STATEMGRSTATUS RPStatus = new STATEMGRSTATUS();

  25.             RPInfo.dwEventType = 100;
  26.             RPInfo.dwRestorePtType = 0;
  27.             RPInfo.llSequenceNumber = 0;
  28.             RPInfo.szDescription = "创建还原点";

  29.             result = SRSetRestorePoint(ref RPInfo, ref RPStatus);

  30.             SystemRestoreKey.DeleteValue("SystemRestorePointCreationFrequency");
  31.         }
复制代码
4.使用WMI创建系统还原点的例子(本节程序使用C#语言编写,C++的例子请参考Using System Restore;我主要介绍用.net创建还原点)
  1. private static bool CreateSRP(string RPName, int RPType, int EventType)
  2.         {
  3.             ManagementClass SRClass = new ManagementClass("//./root/default:SystemRestore");

  4.             ManagementBaseObject SRArgs = SRClass.GetMethodParameters("CreateRestorePoint");
  5.             SRArgs["Description"] = RPName;
  6.             SRArgs["RestorePointType"] = RPType;
  7.             SRArgs["EventType"] = EventType;

  8.             try
  9.             {
  10.                 ManagementBaseObject outParams = SRClass.InvokeMethod("CreateRestorePoint", SRArgs, new InvokeMethodOptions(null, System.TimeSpan.MaxValue));
  11.                 return true;
  12.             }
  13.             catch
  14.             {
  15.                 return false;
  16.             }
  17.         }

  18.         static void Main(string[] args)
  19.         {

  20.             value = CreateSRP("创建还原点", 0, 100);
  21.             if (value == true)
  22.             {
  23.                 Console.Write("Success");
  24.             }
  25.             else
  26.             {
  27.                 Console.Write("Failed");
  28.             }
  29.             Console.Read();

  30.         }
复制代码
5.使用AlphaVSS库删除所有系统还原点的例子(本节程序使用C#语言编写,本代码与vssadmin.exe Delete Shadows /All /Quiet等效)
PS:AlphaVSS库主页:http://alphavss.codeplex.com/
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Alphaleonis.Win32.Vss;

  5. namespace SRDemoVSS
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {

  11.             IVssImplementation vssImplementation = VssUtils.LoadImplementation();
  12.             using (IVssBackupComponents backupComponents = vssImplementation.CreateVssBackupComponents())
  13.             {
  14.                 backupComponents.InitializeForBackup(null);

  15.                 backupComponents.SetContext(VssSnapshotContext.All);

  16.                 IList<VssSnapshotProperties> snapshots = backupComponents.QuerySnapshots().ToArray();

  17.                 if (snapshots.Count == 0)
  18.                 {
  19.                     Console.WriteLine("There were no shadow copies on the system.");
  20.                     return;
  21.                 }

  22.                 try
  23.                 {
  24.                     foreach (VssSnapshotProperties snapshot in snapshots)
  25.                     {
  26.                         Console.WriteLine("- Deleting shadow copy {0:B} on {1} from provider {2} [{3}]...", snapshot.SnapshotId, snapshot.OriginalVolumeName, snapshot.ProviderId, snapshot.SnapshotAttributes);
  27.                         backupComponents.DeleteSnapshot(snapshot.SnapshotId, false);
  28.                     }
  29.                 }
  30.                 finally { }

  31.             }
  32.         }
  33.     }
  34. }
复制代码
6.使用Win32 API和WMI删除所有系统还原点的例子(本节程序使用C#语言编写,本代码与vssadmin.exe Delete Shadows /All /Quiet等效)
以下代码是反编译SystemRestoreExplorer后得到的启发
  1. using System;
  2. using System.Management;
  3. using System.Runtime.InteropServices;

  4. namespace SRDeleteDemoAPI
  5. {
  6.     class Program
  7.     {
  8.         [DllImport("SrClient.dll")]
  9.         public static extern int SRRemoveRestorePoint(int dwRPNum);
  10.         static void Main(string[] args)
  11.         {
  12.             try
  13.             {
  14.                 ManagementObjectSearcher SRObject = new ManagementObjectSearcher("root/default", "SELECT * FROM SystemRestore");
  15.                 foreach (ManagementObject SRInfo in SRObject.Get())
  16.                 {
  17.                     SRRemoveRestorePoint(Convert.ToInt32(SRInfo["SequenceNumber"].ToString()));
  18.                 }
  19.                 Console.WriteLine("Success");
  20.             }
  21.             catch (Exception)
  22.             {
  23.                 Console.WriteLine("Failure");
  24.             }            
  25.         }
  26.     }
  27. }
复制代码

7.使用WMI执行系统还原(本节程序使用C#语言编写)
  1. using System;
  2. using System.Management;
  3. public static bool RestoreFromRestorePoint(int RPNum)
  4.         {
  5.             ManagementClass SRClass = new ManagementClass("//./root/default:SystemRestore");

  6.             try
  7.             {
  8.                 object[] SRArgs = { RPNum };
  9.                 SRClass.InvokeMethod("Restore", SRArgs);
  10.                 return true;
  11.             }
  12.             catch
  13.             {
  14.                 return false;
  15.             }   
  16.         }
复制代码

四.对系统还原点类型的介绍
系统还原点有许多类型,如果你看过本节内容,就可以自己创建一个24小时检查点了(做到别人做不到的事情,是不是很不错啊?)

以下是系统还原点的类型(包括微软未公开的类型):
系统还原类型介绍.png

请勿使用多线程下载工具下载论坛附件!


如果想创建一个指定类型的还原点,只要在第三点第二个例子小小改动即可(特殊类型还原点,经我测试只有用API才有效),具体改动部分如下

        RPInfo.dwEventType = 100; //还原点事件类型(一定要序号)
        RPInfo.dwRestorePtType = 0; //还原点类型(一定要序号)
        RPInfo.szDescription = "RPTest"; //还原点名称

这些都可以根据上面的表格可以改成你想要的值

五.关于系统还原的存储结构

很多人不用系统还原就是因为系统还原占磁盘空间太大了,但是他们没有探究为何系统还原点要占很大的磁盘空间……还有它的存储目录结构如何

PS:我曾经研究过得出结论发到百度Windows8吧(我的贴吧ID和远景ID相同),由于那儿发技术贴回复率寥寥无几(相当于没发);我就把这个结论从我曾经的帖子搬过来吧

系统还原点的大小经过我的观察后得出了一个公式

还原点的大小等于注册表的大小+配置文件大小+修改过的监视范围内的文件的大小

这个结果是楼主创建了1536个XP的还原点和创建了30个Win8.1下的还原点得出来的结论

在NT6下创建一个还原点的大小约等于注册表文件的大小(即Config文件夹的系统注册表文件和每个用户文件下的NTUSER即用户注册表文件),随着对系统改动的增多,还原点的大小会越来越大……
配置文件虽然一般不会超过1MB,但里面记录着系统还原后受影响的软件列表,工作组名,还原点信息(还原点ID,还原点序号,还原点名称,创建时间)等重要信息

系统还原点文件夹就是每个分区根目录下的System Volume Information文件夹,顺便说说当系统还原开启时这个文件夹在NT6下的大致结构

System Volume Information
|- SPP(文件夹) 系统还原点配置文件(包括受影响的程序列表,工作组/域名称)
|- SystemRestore(文件夹) 系统还原 未知作用
|- {很长的ID} (文件夹) 还原点
|- {很长的ID} (文件) 还原点
|- IndexerVolumeGuid (文件) 分区ID信息
|- tracking.log 未知
|- MountPointManagerRemoteDatabase (文件)未知
六.对Windows ME系统还原的探索(这样才符合我自定义的Windows考古队员的头衔)

Windows ME的系统还原虽然功能少得可怜(只有创建还原点和还原);但也有一些优秀的地方可以让微软参考,比如,WinME的还原点是用cab压缩的(cab和wim的压缩算法都是lzx,压缩率和7z差不多,但只有makecab命令行压缩工具;所以用的人少……);而且通过对

ME的%systemdrive%\Windows\System\Restore的文件夹的研究,居然发现可以更改系统还原点的存放位置(我去,这么好的功能,为何在XP开始就消失了呢?);ME的系统还原监视是用一个文件过滤驱动来实现的(类似于UBWF的原理)

虽然WinME被人谩骂;但有些地方还是不错的

七.本文的结局

楼主觉得以自己的渣渣水平这篇文章只能写到这儿了,如果要转载的话,不要忘记给我提供阅读者对这篇文章的建议。

PS:第二次更新还没有结束
18

查看全部评分

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:03:44 |显示全部楼层
本帖最后由 Mouri_Naruto 于 2014-7-18 19:32 编辑
二楼备用,@cjy__05 @lz_hui 这是我从小学时期研究这个功能的成果;PS:我现在高一

由于远景每层楼有20480字的限制,这个备用的2楼终于派上用场了

附1:Windows 8 以后的系统还原的机制及我翻译的MSDN关于系统还原API创建还原点的文章

在Win8以后的系统,为了节省磁盘空间,微软弄了个“创建还原点后24小时再用API创建还原点一律跳过”的机制;这个功能虽然不错,但是对于用惯了Win7下的系统还原的人来说很不习惯;如果你要改回Win7的机制的话可以这样操作

在注册表HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore下面创建一个名为SystemRestorePointCreationFrequency的DWORD值。

如果键值为0,系统还原将不会跳过创建系统还原点。
如果键值为N,系统还原将在 N 分钟期间跳过创建系统还原点。

还有,如果你的电脑是多系统并且其中一个是Windows XP的话,为了解决NT6系统还原点和NT5的不兼容问题;在Windows 8以后,可以这样操作使系统可以在启动卷上创建和Windows XP风格的还原点

在注册表HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore下面创建一个名为ScopeSnapshots的DWORD值。如果这个值为0,系统还原将以早期版本的Windows的方式在启动卷上创建快照。如果这个值被删除,则系统还原会按照Windows8的方式创建系统还原点。

上面提供的两种解决问题的附加方法,出自于http://msdn.microsoft.com/en-us/library/aa378727(v=vs.85).aspx

由于那个页面是英文的,所以我自己翻译了这篇文章(不要怪我英文渣),这篇翻译的资料,对于我接下来要介绍的使用API来创建系统还原点也是一个很不错的参考资料
  1. 调用SRSetRestorePoint

  2. 应用程序可以在引起系统设置显著改变前创建一个系统还原点,比如一次安装、卸载或功能升级。

  3. 安装程序应该在开始安装前通过调用SRSetRestorePoint 函数并设置RESTOREPOINTINFO的dwEventType为BEGIN_SYSTEM_CHANGE以创建一个系统还原点。当程序安装完毕的时候调用SRSetRestorePoint 函数并设置dwEventType为END_SYSTEM_CHANGE 去提示系统还原该程序安装完成。

  4. 如果用户结束该应用的安装,安装程序应该移除安装开始前该程序创建的系统还原点。移除系统还原点是可选的并且可以防止用户意外恢复到安装取消前的状态。如果安装程序要移除系统还原点可以调用 SRRemoveRestorePoint 函数或者调用 SRRemoveRestorePoint 函数并设置dwRestorePointType为CANCELLED_OPERATION,dwEventType设为END_SYSTEM_CHANGE和llSequenceNumber设为安装之前调用SRSetRestorePoint函数返回的值。.

  5. Windows 8:  

  6. 新增一个可以使应用程序开发人员改变系统还原点创建频率的注册表键值。

  7. 应用程序应该创建这个键值,因为它不会在改变前生效。以下是如果这个键值不存在时的情况:如果一个应用程序调用 SRSetRestorePoint 函数创建系统还原点,Windows将会在上一个还原点创建后的24小时之内跳过创建系统还原点。系统还原会设置 IISequenceNumber 下的STATEMGRSTATUS 为上一个创建的还原点的数值,并设置nStatus为ERROR_SUCCESS。SRSetRestorePoint 函数返回 TRUE.

  8. 开发者可以让应用程序在注册表HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore下面创建一个名为SystemRestorePointCreationFrequency的DWORD值。这个值可以改变系统还原点的创建频率

  9. 如果应用程序调用 SRSetRestorePoint 函数创建系统还原点并把上面所述的键值为0,系统还原将不会跳过创建系统还原点。

  10. 如果应用程序调用 SRSetRestorePoint 函数创建系统还原点并把上面所述的键值为N,系统还原将在 N 分钟期间跳过创建系统还原点。

  11. Windows 8:  

  12. 在Windows8上的系统还原只监控启动卷上的文件以帮助进行系统还原。Windows8 创建的在启动卷上的系统还原点可能会被早期版本的Windows删除。请注意虽然只有一个系统卷,但多系统下只有一个启动卷。

  13. 开发者可以让应用程序在注册表HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore下面创建一个名为ScopeSnapshots的DWORD值。如果这个值为0,系统还原将以早期版本的Windows的方式在启动卷上创建快照。如果这个值被删除,则系统还原会按照Windows8的方式创建系统还原点。

  14. 详情请参考Using System Restore.
复制代码
附2:创建系统还原点的常用常量(本节程序使用C#语言编写,C++的例子请参考Using System Restore;我主要介绍用.net创建还原点)
  1. #region Enum
  2.                 private enum RestorePointType
  3.                         {
  4.                                 APPLICATION_INSTALL = 0,
  5.                                 APPLICATION_UNINSTALL = 1,
  6.                                 DESKTOP_SETTING = 2,
  7.                                 ACCESSIBILITY_SETTING = 3,
  8.                                 OE_SETTING = 4,
  9.                                 APPLICATION_RUN = 5,
  10.                                 RESTORE = 6,
  11.                                 CHECKPOINT = 7,
  12.                                 WINDOWS_SHUTDOWN = 8,
  13.                                 WINDOWS_BOOT = 9,
  14.                                 DEVICE_DRIVER_INSTALL = 10,
  15.                                 FIRSTRUN = 11,
  16.                                 MODIFY_SETTINGS = 12,
  17.                                 CANCELLED_OPERATION = 13,
  18.                                 BACKUP_RECOVERY = 14,
  19.                         }
  20.                 private enum EventType
  21.                         {
  22.                                 BEGIN_SYSTEM_CHANGE = 100,
  23.                                 END_SYSTEM_CHANGE = 101,
  24.                                 BEGIN_NESTED_SYSTEM_CHANGE = 102,
  25.                                 END_NESTED_SYSTEM_CHANGE = 103,
  26.                         }
  27.     #endregion
复制代码
附3:系统还原监视的文件类型(摘自MSDN http://msdn.microsoft.com/en-us/library/aa378870(v=vs.85).aspx)
系统还原监视的文件类型.png

请勿使用多线程下载工具下载论坛附件!


附4:我写的系统还原.Net库NWSRLib

http://bbs.pcbeta.com/viewthread-1511133-1-2.html

附5:我写的系统还原实用工具(Mouri_Naruto Windows系统还原管理器
http://bbs.pcbeta.com/viewthread-1528203-1-1.html

(下文待续;楼主还有很多资料得好好准备)


点评

nightzhuxy  你说你不在贴吧混了,这么牛X的帖子也不发了么。。。。  发表于 2014-6-27 10:18
1

查看全部评分

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:06:36 |显示全部楼层
顶顶更健康

惬意 Windows 10 备胎 Windows 8.1

Rank: 15Rank: 15Rank: 15

UID
642607
帖子
15950
PB币
19322
贡献
0
技术
5
活跃
3032

7周年庆典勋章

发表于 2014-4-25 19:08:32 |显示全部楼层
看着很不错的样子!不过不懂!系统还原 制作 一般使用!重要使用的 还是 GHOST

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:10:36 |显示全部楼层
maomihuacha 发表于 2014-4-25 19:08
看着很不错的样子!不过不懂!系统还原 制作 一般使用!重要使用的 还是 GHOST

嗯,谢谢;备份系统还是需要DISM和Ghost这类工具;但是系统还原可以在一些情况下可以解决问题并免于重装系统……由于这功能了解的人不多;所以也是我写本文的初衷

Rank: 1

UID
1043379
帖子
70
PB币
93
贡献
0
技术
0
活跃
535
发表于 2014-4-25 19:11:42 |显示全部楼层
楼主小小年纪就有这样的认知,利害啊

远景有关部门[已退役]

Rank: 15Rank: 15Rank: 15

UID
648169
帖子
5914
PB币
19853
贡献
0
技术
76
活跃
3820

Win10先驱者 我是大学生!

发表于 2014-4-25 19:15:39 |显示全部楼层
楼主好强大啊,,大一自愧不如

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:15:42 |显示全部楼层
200320323 发表于 2014-4-25 19:11
楼主小小年纪就有这样的认知,利害啊

谢谢你的赞美;其实这篇文章还没有写完;接下来还要介绍系统还原点的类型;如何在程序中显示系统还原所占的大小;如何脱离vssadmin来清理还原点;这些都是我接下去研究的

我的目标是更多的了解一些东西

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:16:02 |显示全部楼层
zhxhwyzh14 发表于 2014-4-25 19:15
楼主好强大啊,,大一自愧不如

谢谢你的赞美;其实这篇文章还没有写完;接下来还要介绍系统还原点的类型;如何在程序中显示系统还原所占的大小;如何脱离vssadmin来清理还原点;这些都是我接下去研究的

我的目标是更多的了解一些东西

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:17:52 |显示全部楼层
自顶等回复

Rank: 5Rank: 5Rank: 5

UID
2867073
帖子
763
PB币
798
贡献
0
技术
85
活跃
554
发表于 2014-4-25 19:21:50 |显示全部楼层
樓主厲害喔...

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:23:37 |显示全部楼层
jacky211 发表于 2014-4-25 19:21
樓主厲害喔...

谢谢你的赞美;其实这篇文章还没有写完;接下来还要介绍系统还原点的类型;如何在程序中显示系统还原所占的大小;如何脱离vssadmin来清理还原点;这些都是我接下去研究的

我的目标是更多的了解一些东西

Rank: 2Rank: 2

UID
807994
帖子
111
PB币
102
贡献
0
技术
24
活跃
1302
发表于 2014-4-25 19:26:38 |显示全部楼层
本帖最后由 he778800 于 2014-4-25 19:29 编辑

还是没搞懂 这个 有啥用处 比如我的c盘 开启了 这个 系统保护功能
那在什么情况下 他会自动创建 还原点? 还有 还原该还原点后 又会带来什么 影响?
还有啊  什么 卷影复制 又是啥  我还是 不明白
还有楼主 是高1生  还真是厉害了 我 自愧不如啊
对了 还有一件事请教 为什么 大多数人 还是 使用普通的 硬盘系统 做主系统
而不使用VHD这类呢?  VHD 有什么优劣?

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:41:06 |显示全部楼层
he778800 发表于 2014-4-25 19:26
还是没搞懂 这个 有啥用处 比如我的c盘 开启了 这个 系统保护功能
那在什么情况下 他会自动创建 还原点? ...

这个的用处是为了解决一些系统的故障用的……很多情况下都用得到
创建还原点,有24小时自动创建,程序安装,修改设置和手动创建等
还原以后,除了系统文件和配置被还原,其余不受影响
卷影复制,是微软在Windows系统下提供的热备份技术
谢谢你的评价
不用VHD是因为VHD的速度太慢了

小麦

Rank: 15Rank: 15Rank: 15

UID
1591929
帖子
16314
PB币
23406
贡献
0
技术
830
活跃
3411

数码达人 活动参与先锋 远景技术达人 原创先锋 8周年庆典勋章

发表于 2014-4-25 19:44:31 |显示全部楼层
罕见的技术帖啊,第一次看到讲述vssadmin工具的帖子,必须支持!

Rank: 7Rank: 7Rank: 7

UID
2810543
帖子
1258
PB币
491
贡献
0
技术
29
活跃
1766
发表于 2014-4-25 19:47:00 |显示全部楼层
楼主不错哦,人才一个

Rank: 2Rank: 2

UID
807994
帖子
111
PB币
102
贡献
0
技术
24
活跃
1302
发表于 2014-4-25 19:48:22 |显示全部楼层
Mouri_Naruto 发表于 2014-4-25 19:41
这个的用处是为了解决一些系统的故障用的……很多情况下都用得到
创建还原点,有24小时自动创建,程序安 ...

比如我 新安装了 一个win 8.1系统 没安装驱动
那我自己手动创建一个还原点 然后安装驱动 结果 出问题了 比如 黑屏什么的
那用这个还原点 还原可行?
还有我一般都是用着VHD 能用或者有必要用 这个 功能不?

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:50:51 |显示全部楼层
he778800 发表于 2014-4-25 19:48
比如我 新安装了 一个win 8.1系统 没安装驱动
那我自己手动创建一个还原点 然后安装驱动 结果 出问题了  ...

可以i,有必要

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:51:18 |显示全部楼层
LZL61219 发表于 2014-4-25 19:47
楼主不错哦,人才一个

谢谢你的赞美;其实这篇文章还没有写完;接下来还要介绍系统还原点的类型;如何在程序中显示系统还原所占的大小;如何脱离vssadmin来清理还原点;这些都是我接下去研究的

我的目标是更多的了解一些东西

14N.M.

UID
3887572
帖子
2836
PB币
1818
贡献
0
技术
753
活跃
4209

远景开发达人 远景技术达人 Win10先驱者 十周年

发表于 2014-4-25 19:52:02 |显示全部楼层
raymai97 发表于 2014-4-25 19:44
罕见的技术帖啊,第一次看到讲述vssadmin工具的帖子,必须支持!

谢谢你的赞美;其实这篇文章还没有写完;我不仅要涉及到这个工具,还要涉及到卷影复制API……只是这些我得慢慢探索

我的目标是更多的了解一些东西
回顶部
Copyright (C) 2005-2022 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛