蜂窝注册表和永久存储
WindowsCE有兩種注冊表,一種是基于RAM的,一種是基于蜂窩的注冊表;WindowsCE會默認使用前者。如果是使用前者,PB在編譯的時候會先把common.reg、platform.reg、project.reg及所有的.reg文件的內(nèi)容合并到reginit.ini文件,然后再將reginit.ini文件壓縮成default.fdf的文件,放置到WindowsCE的操作系統(tǒng)映像文件nk.bin中去。在操作系統(tǒng)啟動的時候,default.fdf文件會被解壓到RAM中形成基于RAM的注冊表,既然是基于RAM的注冊表,那么對它所有的改變都會在斷電后消失。
??????? 如何才能使操作系統(tǒng)運行起來后所有的改動在斷電時都不丟失而在以后重新啟動時永久保存呢?答案就是利用Flash、DOC、硬盤、SD/MCC等永久存儲設(shè)備,將修改后的注冊表保存到這些永久存儲設(shè)備上。但是如果把所有注冊表都放置到永久存儲設(shè)備上,那么WindowsCE又怎么能在沒有加載存儲設(shè)備驅(qū)動的情況下讀到注冊表呢?且一般情況下,加載存儲設(shè)備驅(qū)動也需要注冊表的支持!那么怎么才能做到呢?這就是蜂窩注冊表所想到的。
??????? 蜂窩注冊表把WindowsCE的注冊表分成兩部分,第一部分是稱做boot.hv的注冊表,里面的東西是一些在沒有拿到保存在磁盤注冊表之前引導(dǎo)時需要的一些設(shè)置,這部分的注冊表和基于RAM的一樣的,修改之后如果斷電沒有了,所以這部分的注冊表項都是不需要改動的,需要改動的都放到第二部分;第二部分是system.hv和user.hv注冊表,也就是一直提到的要放到永久存儲設(shè)備上的注冊表。PB在編譯的時候會根據(jù).reg文件中的注釋來判斷哪些注冊表項放到boot.hv中,要放置到boot.hv中的注冊表項必須放置到下列注釋對之間:
; HIVE BOOT SECTION
.......
......
; END HIVE BOOT SECTION
?
夾在這個注釋對之間的注冊表項,PB在編譯的時候會把它們放置到boot.hv文件中去,其他的注冊表項會分別被放置到default.hv和user.hv文件中去。WindowsCE在啟動的第一階段先把所有的.hv文件加載到RAM中,然后打開boot.hv拿到必要的注冊表設(shè)置,其中包括了如何加載system.hv以及永久存儲設(shè)備的驅(qū)動的注冊表設(shè)置,所以那些和加載永久存儲設(shè)備相關(guān)的驅(qū)動都要放到boot.hv中去,如FAT文件驅(qū)動,mspart分區(qū)驅(qū)動等,有一點需要特別注意的就是如果你的系統(tǒng)使用的是BinFS文件系統(tǒng),且device.exe位于NK.bin中,那么一定要在操作系統(tǒng)啟動的第一階段保證BinFS文件系統(tǒng)可用,否則系統(tǒng)就不可能從永久存儲設(shè)備加載system.hv了。
??????? WindowsCE在啟動的時候,永久存儲設(shè)備上并不存在任何注冊表文件(.hv),這個時候WindowsCE會將內(nèi)存的default.hv和user.hv文件復(fù)制到注冊表的BootVars鍵制定的地方,且default.hv往往會被重命名為system.hv,WindowsCE在第二次啟動及以后的啟動時,會先檢查永久存儲設(shè)備上的.hv文件是不是和RAM中的一致,不一致的話就加載永久存儲設(shè)備上的注冊表項。
??????? 需要注意的是,蜂窩注冊表也是在RAM中運行的,不同的是WindowsCE在啟動時會到永久存儲設(shè)備上讀取改動的注冊表項,因為這樣才能保證速度,所以任何對注冊表的改動都是在內(nèi)存中進行的,如果不想辦法將內(nèi)存中的注冊表保存到磁盤上,那么這些改動還是會丟失的,通常有兩種方法避免丟失,一種方法是通過應(yīng)用程序調(diào)用RegFlushKey函數(shù),另一種方法就是在注冊表中將RegistryFlags注冊鍵的值設(shè)置為1讓系統(tǒng)在每次改動后自動保存注冊表。
?
[HKEY_LOCAL_MACHINE\init\BootVars]
? ?"SYSTEMHIVE"="Documents and Settings\\system.hv"
? ?"PROFILEDIR"="Documents and Settings"
? ?"Start DevMgr"=dword:1
? ?"Flags"=dword:1000
? ?"RegistryFlags"=dword:1
總結(jié)
以上是生活随笔為你收集整理的蜂窝注册表和永久存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信手机号转账要手续费吗?转账多久到账
- 下一篇: 计算机大小端