????? 倒騰了幾天,在CE5.0上實(shí)現(xiàn)了CF卡通過Hive-based registry斷電保存注冊表,我采用的是FAT文件系統(tǒng).
???? 開門見山,先給出我的步驟:
???? (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.前者是啟動時的注冊表項(xiàng),后者是系統(tǒng)注冊表項(xiàng).所謂的HIVE注冊表就是先加載boot.hv,把注冊表保存所在的存儲驅(qū)動和文件系統(tǒng)先加載;然后再加載system.hv,也就是從磁盤上去讀系統(tǒng)的注冊表項(xiàng).在啟動時加載boot.hv的標(biāo)簽就是;HIVE BOOT SECTION 和;END BOOT SECTION.
在[HKEY_LOCAL_MACHINE\init\BootVars]中"SYSTEMHIVE"是指保存system.hv的路徑,"Registryflags"=dword:1是為了在修改了注冊表后自動刷新從而保存.因?yàn)镠IVE注冊表也是在內(nèi)存中運(yùn)行的,不同的是啟動的時候會從磁盤上去讀改動的表項(xiàng),所以你做的的注冊表改動也是在內(nèi)存中做的,這個時候如果你不去將內(nèi)存中的數(shù)值保存到磁盤上,那么這些改動還是會丟失的.當(dāng)然也可以編程實(shí)現(xiàn)(調(diào)用RegflushKey).在實(shí)現(xiàn)HIVE過程中,要實(shí)現(xiàn)兩部分:存儲HIVE介質(zhì)的驅(qū)動以及文件系統(tǒng)的相應(yīng)項(xiàng).由于我的保存是在CF卡(相當(dāng)于硬盤)上實(shí)現(xiàn)的,所以把platform.reg里的ATADisk驅(qū)動和存儲管理中StorageManager\Profiles\HDProfile相關(guān)項(xiàng)都加進(jìn)去,接著把System\StorageManager\FATFS加入,完成加載FAT文件系統(tǒng).
收獲的幾點(diǎn):1.實(shí)現(xiàn)HIVE配置文件改動包括三部分:(1)bootvars表項(xiàng),作用是保存的位置,多用戶以及自動刷新機(jī)制.(2)存儲介質(zhì)的驅(qū)動,在我的情況下也就是硬盤的驅(qū)動項(xiàng);(3)文件系統(tǒng)的加載(FATFS).
?。玻吹揭恍┪恼略诖鎯︱?qū)動中添加"flags"=dword:1000,作用是只加載一次.
?。常?"MountAsBootable"=dword:1?? 這句等價于4.2下的mountflag=dword:2
這句話用來指明注冊表保存在該磁盤驅(qū)動系統(tǒng)下.我驗(yàn)證了wince5.0下mountflag=dword:2仍然有效.