1.简介

WMI是Windows 的管理支持技术,WMI最初于 1998 年作为一个附加组件与 Windows NT 4.0 Service Pack 4 一起发行,是内置在 Windows 2000、Windows XP 和 Windows Server 2003 系列操作系统中核心的管理支持技术。

WMI 是一种规范和基础结构,通过它可以访问、配置、管理和监视所有的 — 几乎所有的 Windows 资源。

2.WMI脚本编程初体验

先看一个例子:使用 WMI 和 VBScript 检索总物理内存

'//“.”代表本机
const DEF_strComputer = "."

'//在任何 WMI 脚本中,第一个步骤都是建立一个到目标计算机上的 Windows 管理服务的连接,形如:
'//Set wbemServices = GetObject("winmgmts:\\计算机名称")
 
Set wbemServices = Getobject("winmgmts:\\.")
Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")
 
For Each wbemObject In wbemObjectSet
    WScript.Echo "物理内存: " & CInt(wbemObject.TotalPhysicalMemory / 1024) & "M 字节。"
Next

3.WMI开发用到的工具下载

WMI Administrative Tools(WMI CIM Studio,WMI Object Browser)下载:
http://www.microsoft.com/downloads/details.aspx?familyid=6430F853-1120-48DB-8CC5-F2ABDC3ED314&displaylang=en

4.参考资料

WMI 脚本入门:第一部分http://msdn.microsoft.com/zh-cn/library/ms974579.aspx
WMI 脚本入门:第二部分http://msdn.microsoft.com/zh-cn/library/ms974592.aspx
WMI 脚本入门:第三部分http://msdn.microsoft.com/zh-cn/library/ms974547.aspx
使用WMI:http://msdn.microsoft.com/en-us/library/aa393964.aspx
Scripting API for WMI:http://msdn.microsoft.com/en-us/library/aa393258(VS.85).aspx
 


本文链接地址: WMI脚本编程初体验
https://blog.qingfengju.com/index.asp?id=59

分类:脚本编程 查看次数:12144 发布时间:2009/5/31 15:01:09

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系统安全,实现磁盘保护
https://blog.qingfengju.com/index.asp?id=58

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