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