作者:新新世界
转自:http://blog.sina.com.cn/s/blog_5165652c0100at9l.html
第一部分:介绍
使用Microsoft® Windows® XP Embedded我们可以创建一个基于Compact Flash™(CF卡)引导运行的XPE操作系统。使用CF卡有很多优势,最显著的优势是创建嵌入式装置,这些设备通常较为可靠的,因为他们都没有任何活动部件。使用CF卡的缺点是,它有一定的读写次数限制,当我们反复的对CF进行读写操作的时候,随着时间的推移,CF上的坏块就会越来越多,同时读写速度也会越来越慢,甚至导致最终的系统崩溃或者文件丢失。增强性过滤写入功能(EWF)提供了一种保护CF卡的方式,通过限制直接写入的方式,避免了频繁的读写对CF卡造成的损坏,从而延长了CF卡的使用寿命和读写次数。本文主要描述了如何在CF卡上部署具有EWF功能的XPE操作系统和如何在CF卡上开启EWF功能。
注意,本文提供的方案是假设你的CF卡是不可进行分区操作的,即属于可移动磁盘类型的CF卡。有很多厂商在生产CF卡的时候,就将CF卡标识为本地磁盘或者固定磁盘,这类的CF可以和IDE一样的进行分区和部署具有EWF功能的XPE,不需要使用本文提供的方法进行EWF的部署。当然,如果能够使用已经标识为本地磁盘的CF卡,还是建议使用这样的CF卡,因为它能够提供更好的功能支持和存储持久数据。
在阅读本文之前,建议先了解一下关于EWF的运行原理和工作模式,可以参看文章:lzg_ad:EWF原理详解。本文提供的EWF部署方案是将EWF设置存放在注册表中,这样就不需要有特定的EWF分区。虽然该方案解决了可移动磁盘类型的CF卡不能设置EWF分区的问题,但是他也限制了EWF的很多功能,第一是只能有一个被保护卷,如果你需要保护多个分区,那么你需要使用可分区的CF卡;另一个是禁止(-disable)命令不能使用,这是因为EWF设置只能够存储在注册表中,同时注册表被EWF写保护了,因此命令操作会失效。但是,你可以使用-commitanddisable来完成相关的设置操作,因为通过这个命令首先会把对目标分区所做的操作提交到真实的CF卡中去,重启后,命令和设置不会丢失。
第二部分:构建镜像文件
首先,我们需要象平常一样,利用目标设计器来构建你的XPE镜像。一般情况下,如果想使用EWF,该磁盘必须可以进行分区操作,而XPE将在未使用的磁盘空间上创建EWF分区。而大多数CF卡由于是可移动磁盘,所以他不能够进行分区。因此,EWF必须通过手动配置注册表的方式在CF卡上实现。要做到这一点,我们要先建立XPE镜像,然后在FBA完成通过注册表开启EWF。
在你的XPE镜像中,添加一下组件:
1.Enhanced Write Filter
2.EWF NTLDR
3.EWF Manager Console application
4.Registry Editor (optional)
5.Enhanced Write Filter API (optional)
另外,你必须确认你将EWF缺省状态设置为Disable,同时没有创建EWF分区。要想实现这两点,首先在Enhanced WriteFilter组件的Settings中清除Start EWFEnabled复选框上的勾。如下图所示:
图1:禁用EWF
其次,禁用FBA DLL/COMRegistration组件设置,该设置在Enhanced WriteFilter组件的Resources设置中,如下图所示:
如果以上设置没有进行的话,那么EWF将会尝试创建EWF分区并且失败。如果EWF开始便是启用状态,那么针对一下的修改将不会起作用,因为EWF将防止数据被写至最底层的磁盘分区。
第三部分:配置
下一步我们将部署做好的XPE镜像文件到你的目标硬件上。拷贝镜像文件到CF卡并启动进行FBA,等待FBA完成。
注意
第四部分:启用EWF
下一步我们将在引导分区上(C盘)开启EWF功能。因为在FBA前,我们已经在Enhanced WriteFilter的配置中禁用了EWF功能,所以EWF没有经过目标设计器的配置和FBA的配置过程。这些必须手动的在注册表中进行设置。
首先,验证一下的注册表信息出现在你的目标设备中:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf]
"ErrorControl"=dword:00000001
"Group"="System BusExtender"
"Start"=dword:00000000
"Type"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{71A27CDD-812A-11D0-BEC7-08002BE2092F}]
"UpperFilters"="Ewf"
其次,添加一下信息到你目标设备的注册表中:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf\Parameters]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf\Parameters\Protected]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf\Parameters\Protected\Volume0]
"VolumeID"="{1EA414D1-6760-4625-8CBE-4F9F85A48E15}"
"Type"=dword:00000001
"ArcName"="multi(0)disk(0)rdisk(0)partition(1)"
这些更改也可以通过在注册表编辑器中导入一个注册表文件(.reg)来实现。或者你也可以在其它计算机上离线编辑好这个注册表文件,然后导入到目标机的注册表内。其中最后一个键值"ArcName",是指的需要保护的目标机磁盘分区的ARC路径,可根据需要进行设置。
最后,重新启动你的目标机,EWF功能将会启动,同时保护目标磁盘的写操作。
第五部分:问题处理
EWF控制程序(EWFMGR.exe)是一个针对被保护磁盘的控制工具,你可以通过这个命令来完成EWF的各项操作。你可以使用以下命令来检查EWF当前的工作状态:
ewfmgr c:(当C盘是你要保护的磁盘分区)
执行该命令后,EWF管理程序将显示以下类似的信息:
ProtectedVolume Configuration
如果你试图用EWF管理程序去检查一个没有保护的分区状态时,你将会得到一个错误。这个错误信息将会指出无法找到指定的保护卷。所有更改当前EWF状态的命令都将在重新启动后生效。如需更多资讯,请参阅WindowsXP Embeddeddocumentation。但必须注意的是,利用注册表来配置EWF,禁用EWF的操作只能通过执行commitanddisable命令来完成。
Ewfmgr c:-commitanddisable -live
第六部分:结尾
Enhanced WriteFilter(EWF)通常用来保护Flash介质的存储媒体的写操作,这有助于延长Flash存储器的使用寿命。不幸的是,EWF的标准配置不能用于所有Flash媒体。通过设置注册表的方法提供了一种解决方案,用于当标准的EWF配置方式不能正常地工作或不能正常部署的情况,这种方案适合于任何介质类型的媒体。