1.Windows SteadyState简介

Windows SteadyState可防止计算机的设置被更改,可防止某些用户自行安装不需要的软件,可以实现Windows 磁盘保护功能,还提供了磁盘保护功能的API编程接口,完全可以媲美影子系统(PowerShadow)。

2.下载安装Windows SteadyState

中文版下载地址:
http://www.microsoft.com/downloads/details.aspx?familyid=D077A52D-93E9-4B02-BD95-9D770CCDB431&displaylang=zh-cn

在安装 Windows SteadyState 之前,需要验证计算机运行的是否为正版 Microsoft Windows。

3.SteadyState的磁盘保护功能

我们这里重点关注SteadyState的磁盘保护功能。

3.1 SteadyState的磁盘保护功能原理

第一次安装 Windows SteadyState 时,Windows 磁盘保护默认为关闭状态,Windows 磁盘保护打开后,会创建一个缓存文件,用于保存对操作系统和程序文件的所有更改。创建的

缓存文件将在系统驱动器上预留大量的空间,安装并打开 Windows 磁盘保护之后,再关闭 Windows 磁盘保护会删除安装过程中创建的缓存文件。

在安装并打开 Windows 磁盘保护之前,应先对硬盘进行碎片整理,在有碎片的硬盘上安装并打开 Windows 磁盘保护会导致创建 Windows 磁盘保护缓存失败。

3.2 使用SteadyState的磁盘保护功能

使用SteadyState的磁盘保护功能需要使用管理员登陆计算机。
a.执行磁盘碎片整理;
b.通过SteadyState打开磁盘保护功能,注意打开后默认状态是“重新启动时删除所有更改”;
c.要保存当前系统状态,请选择“永久保留所有更改”;
d.要实现磁盘保护、系统还原功能,请选择“重新启动时删除所有更改”。

Windows SteadyState的磁盘保护功能原理

一句话总结:
选择“永久保留所有更改”后,对系统进行各种设置,之后重新启动计算机,再设置为“重新启动时删除所有更改”并重启即可。

3.3 使用 Windows 磁盘保护 API

Windows SteadyState 应用程序编程接口 (API) 由 Windows Management Instrumentation (WMI) 接口组成。

安装好SteadyState之后,在WMI的命名空间root\WMI下,会有一个叫做WDP_CONTROL的WMI类,该类具有五个属性:
EnableWDPAndReboot、CurrentStatus、CurrentMode、DisableWDPAndReboot 和 PersistDateTime。

a.CurrentMode
通过 CurrentMode 属性可以设置或检索 Windows 磁盘保护的当前模式。注意,只有 CurrentStatus 属性是 WDP_ACTIVE,才能应用 CurrentMode 属性。表 1 中列出的 CurrentMode 属性直接对应于 Windows 磁盘保护打开时可用的三个磁盘保护级别。

表 1:Windows 磁盘保护模式以及对应的磁盘保护级别

 Windows 磁盘保护模式

 磁盘保护级别

 WDP_MODE_DISCARD (0)  在重新启动时删除所有更改
 WDP_MODE_PERSIST (1)  临时保留更改
 WDP_MODE_COMMIT (2)  永久保留所有更改
b.CurrentStatus
CurrentStatus 属性是只读属性。在查询时,此属性将返回一个值,表明 Windows 磁盘保护是主动的还是被动的。可能会返回下列两个值:
  • WDP_ACTIVE (0)
  • WDP_PASSIVE (1)

如果 Windows 磁盘保护主动缓存更改,则处于主动状态 (WDP_ACTIVE)。在 Windows 磁盘保护打开时,如果可以直接将更改保存到硬盘中,而不必使用缓存文件作为临时存储,Windows 磁盘保护则处于被动状态 (WDP_PASSIVE)。

请注意,用户无法通过 Windows SteadyState 用户界面选择或写入被动状态 (WDP_PASSIVE),该状态供 Windows SteadyState 应用程序内部使用。通常,此属性的值是 WDP_ACTIVE。

c.DisableWDPAndReboot

DisableWDPAndReboot 可以禁用并卸载 Windows 磁盘保护。此脚本执行的功能与在 Windows SteadyState 用户界面中关闭 Windows 磁盘保护相同。该过程要求进行三次重新启动来完成下列任务:

  1. 清除缓存。
  2. 提交对计算机所做的更改(删除 Windows 磁盘保护驱动程序)。
  3. 完成 Windows 磁盘保护的卸载。
也可以执行命令:sctui /DisableWDPAndReboot
d.EnableWDPAndReboot
EnableWDPAndReboot 可以安装并启用 Windows 磁盘保护。在安装期间,将打开一个显示状态消息的控制台窗口。如果安装成功,将自动重新启动系统,以完成 Windows 磁盘保护的启用。

也可以执行命令:sctui /EnableWDPAndReboot
e.PersistDateTime
在 Windows 磁盘保护打开时,通过 PersistDateTime 属性可以查询或指定 WDP_MODE_PERSIST 过期并自动还原为 WDP_MODE_DISCARD 的日期和时间。在查询时,此属性的日期类型是 WBemScripting.SWbemDateTime。注意,除非 CurrentMode 属性设置为 WDP_MODE_PERSIST,否则,PersistDateTime 属性无效。
 
以下示例代码定义一些常数,将 Windows 磁盘保护级别设置为“临时保留更改”选项 (WDP_MODE_PERSIST),然后指定此模式过期并还原为“在重新启动时删除所有更改”选项 (WDP_MODE_DISCARD) 的日期和时间。
 
' WDP_Control.CurrentStatus

const WDP_ACTIVE  = 0

const WDP_PASSIVE = 1

 

' WDP_Control.CurrentMode

const WDP_MODE_DISCARD = 0

const WDP_MODE_PERSIST = 1

const WDP_MODE_COMMIT  = 2

 

' WDP_Control.PersistDateTime 属性要求使用 FILETIME 类型。 

' 通过可读字符串创建 FILETIME 最容易的方式是使用

 

' WBemScripting.SWbemDateTime 对象。

set dateTime = Createobject ("WBemScripting.SWbemDateTime")

 

' datetime 设置为 2020 5 8 日上午 8:00

dateTime.SetVarDate #5/8/2020 08:00:00 AM#

 

' 获取 WDP_Control WMI 类的实例

set objWbemServices = GetObject ("winmgmts:\\.\root\wmi")

set setWdpObjects   = objWbemServices.ExecQuery ("Select * FROM WDP_Control")

 

for each objWdp in setWdpObjects

    objWdp.CurrentMode     = WDP_MODE_PERSIST

    objWdp.PersistDateTime = dateTime.GetFileTime

    objWdp.Put_

next

4.其他SteadyState相关文章

Windows 磁盘保护功能在 Windows SteadyState API 的说明:
http://support.microsoft.com/kb/938335/zh-cn

5.小结

SteadyState在某种程度上比EWF和GHOST都要好用,只是要占用C盘比较多的空间。


本文链接地址: 用Windows SteadyState来保护Windows系统安全,实现磁盘保护
http://qingfengju.com/index.asp?id=58

分类:Win32/C++ 查看次数:7644 发布时间:2009-5-31 12:49:38