????? 倒騰了幾天,在CE5.0上實現了CF卡通過Hive-based registry斷電保存注冊表,我采用的是FAT文件系統.
???? 開門見山,先給出我的步驟:
???? (1)在PB的Catalog中將HIVE-based Registry加入到OS中.
???? ? (2)在platform.reg中添加如下注冊表字段:
?????????? ; HIVE BOOT SECTION
[HKEY_LOCAL_MACHINE\init\BootVars]
?????? "SYSTEMHIVE"="Documents and Settings\\system.hv"
?????? "PROFILEDIR"="Documents and Settings"?????
?????? "Start DevMgr"=dword:1
?????? "Registryflags"=dword:1
??? [HKEY_LOCAL_MACHINE\init\BootVars]
??????? "DefaultUser"="default"
[HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
??? "FriendlyName"="FAT FileSystem"
??? "Dll"="fatfsd.dll"
??? "Flags"=dword:00000064
??? "Paging"=dword:1
??? "EnableCache"=dword:1
??? "CacheSize"=dword:0
??? "Util"="fatutil.dll"
??? "CacheDll"="diskcache.dll"
[HKEY_LOCAL_MACHINE\Drivers\PCMCIA\ATADisk]
??? "Dll"="ATADISK.DLL"
??? "Prefix"="DSK"
??? "Ioctl"=dword:4
??? "Profile"="PCMCIA"
??? ; Indicate we are a power manageable interface and a storage driver
??? "IClass"=multi_sz:"{8DD679CE-8AB4-43c8-A14A-EA4963FAA715}","{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
[HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\50]
?? "Dll"="ATADISK.DLL"
?? "Entry"="DetectATADisk"
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile]
??? "MountAsRoot"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile]
??? "MountAsBootable"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile]
??? "Name"="IDE Hard Disk Drive"
??? "Folder"="hard disk"
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile\FATFS]
??? "EnableCacheWarm"=dword:0
; END HIVE BOOT SECTION
????????
????????? 接下來分析一下其中的原理.wince下的注冊表分為兩部分:boot.hv和system.hv.前者是啟動時的注冊表項,后者是系統注冊表項.所謂的HIVE注冊表就是先加載boot.hv,把注冊表保存所在的存儲驅動和文件系統先加載;然后再加載system.hv,也就是從磁盤上去讀系統的注冊表項.在啟動時加載boot.hv的標簽就是;HIVE BOOT SECTION 和;END BOOT SECTION.
在[HKEY_LOCAL_MACHINE\init\BootVars]中"SYSTEMHIVE"是指保存system.hv的路徑,"Registryflags"=dword:1是為了在修改了注冊表后自動刷新從而保存.因為HIVE注冊表也是在內存中運行的,不同的是啟動的時候會從磁盤上去讀改動的表項,所以你做的的注冊表改動也是在內存中做的,這個時候如果你不去將內存中的數值保存到磁盤上,那么這些改動還是會丟失的.當然也可以編程實現(調用RegflushKey).在實現HIVE過程中,要實現兩部分:存儲HIVE介質的驅動以及文件系統的相應項.由于我的保存是在CF卡(相當于硬盤)上實現的,所以把platform.reg里的ATADisk驅動和存儲管理中StorageManager\Profiles\HDProfile相關項都加進去,接著把System\StorageManager\FATFS加入,完成加載FAT文件系統.
收獲的幾點:1.實現HIVE配置文件改動包括三部分:(1)bootvars表項,作用是保存的位置,多用戶以及自動刷新機制.(2)存儲介質的驅動,在我的情況下也就是硬盤的驅動項;(3)文件系統的加載(FATFS).
2.看到一些文章在存儲驅動中添加"flags"=dword:1000,作用是只加載一次.
3. "MountAsBootable"=dword:1?? 這句等價于4.2下的mountflag=dword:2
這句話用來指明注冊表保存在該磁盤驅動系統下.我驗證了wince5.0下mountflag=dword:2仍然有效.