第一部分:介绍
使用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)
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 Write Filter组件的Settings中清除
Start EWF Enabled复选框上的勾。如下图所示:
其次,禁用FBA DLL/COM Registration组件设置,该设置在Enhanced Write Filter组件的Resources设置中,如下图所示:
图2:禁用
FBA DLL/COM Registration
如果以上设置没有进行的话,那么EWF将会尝试创建EWF分区并且失败。如果EWF开始便是启用状态,那么针对一下的修改将不会起作用,因为EWF将防止数据被写至最底层的磁盘分区。
第三部分:配置
下一步我们将部署做好的XPE镜像文件到你的目标硬件上。拷贝镜像文件到CF卡并启动进行FBA,等待FBA完成。
注意 如果你使用File Allocation Table (FAT)文件格式格式化你的设备,你需要运行bootprep.exe 来创建引导分区。任何经过手动修改的XPE镜像都需要做这一步操作,因为你将在下一步开启EWF功能。
第四部分:启用EWF
下一步我们将在引导分区上(C盘
)开启EWF功能。因为在FBA前,我们已经在Enhanced Write Filter的配置中禁用了EWF功能,所以EWF没有经过目标设计器的配置和FBA的配置过程。这些必须手动的在注册表中进行设置。
首先,验证一下的注册表信息出现在你的目标设备中:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"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管理程序将显示以下类似的信息:
Protected Volume Configuration
Type RAM
State ENABLED
Volume ID BB E6 0E BC 00 64 15 00 05 00 00 00 00 00 00 00
Device Name "\Device\HarddiskVolume1" [C:]
Max Levels 1
Clump Size 512
Current Level 1
Memory used for data 2624000 bytes
Memory used for mapping 4096 bytes
如果你试图用EWF管理程序去检查一个没有保护的分区状态时,你将会得到一个错误。这个错误信息将会指出无法找到指定的保护卷。所有更改当前EWF状态的命令都将在重新启动后生效。如需更多资讯,请参阅
Windows XP Embedded documentation。但必须注意的是,利用注册表来配置EWF,禁用EWF的操作只能通过执行commitanddisable命令来完成。
Ewfmgr c: -commitanddisable -live
第六部分:结尾
Enhanced Write Filter(EWF)通常用来保护Flash介质的存储媒体的写操作,这有助于延长Flash存储器的使用寿命。不幸的是,EWF的标准配置不能用于所有Flash媒体。通过设置注册表的方法提供了一种解决方案,用于当标准的EWF配置方式不能正常地工作或不能正常部署的情况,这种方案适合于任何介质类型的媒体。
如需更多信息,请参阅Windows XP Embedded的产品文档或者Embedded Community Web site。
本文转自雷志刚 51CTO博客,原文链接:http://blog.51cto.com/leizhigang/238250