版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、wince注冊(cè)表結(jié)構(gòu)與桌面windows一樣,windows ce也使用注冊(cè)表(registry)來(lái)保存應(yīng)用程序、驅(qū)動(dòng)程序和用戶(hù)的設(shè)定以及其他一些配置信息。windows ce注冊(cè)表也采用樹(shù)形結(jié)構(gòu)來(lái)管理配置信息,由于windows ce注冊(cè)表的結(jié)構(gòu)和功能與桌面windows幾乎一樣,在這里就不詳細(xì)介紹了,讀者可以參考其它關(guān)于注冊(cè)表的資料。windows ce支持四個(gè)根鍵,描述如下:鍵名 描述hkey_local_machine 硬件和驅(qū)動(dòng)配置數(shù)據(jù)hkey_current_user 用戶(hù)配置數(shù)據(jù)hkey_classes_root ole和文件類(lèi)型匹配配置數(shù)據(jù)hkey_users 適用于所有用戶(hù)的
2、數(shù)據(jù)由于嵌入式系統(tǒng)的特點(diǎn),一些嵌入式設(shè)備是沒(méi)有外存的。因此windows ce的注冊(cè)表提供了兩種實(shí)現(xiàn)方式:基于ram的注冊(cè)表(ram-based registry)和基于hive的注冊(cè)表(hive-based registry)。我們可以選擇在windows ce中使用任何一種注冊(cè)表,注冊(cè)表類(lèi)型對(duì)于用戶(hù)和應(yīng)用程序來(lái)說(shuō)是透明的。 基于ram的注冊(cè)表正如其名,基于ram的注冊(cè)表把整個(gè)注冊(cè)表作為一個(gè)對(duì)象存儲(chǔ)堆存放在系統(tǒng)的內(nèi)存中。這意味著如果對(duì)系統(tǒng)進(jìn)行冷啟動(dòng)或者系統(tǒng)斷電,對(duì)注冊(cè)表的所有改動(dòng)都會(huì)丟失。如果使用基于ram的注冊(cè)表,對(duì)注冊(cè)表的讀寫(xiě)訪問(wèn)操作會(huì)變得非常高效。因此基于ram的注冊(cè)表比較適用于沒(méi)有外
3、部存儲(chǔ),而且有電池保存內(nèi)存數(shù)據(jù)(battery-backed ram)的設(shè)備。如果有外存且經(jīng)常冷啟動(dòng)的設(shè)備采用基于ram的注冊(cè)表,則需要在系統(tǒng)斷電的時(shí)候?qū)ψ?cè)表進(jìn)行保存,等系統(tǒng)再次啟動(dòng)時(shí)對(duì)保存的注冊(cè)表進(jìn)行還原。windows ce提供了兩種方法用來(lái)斷電保存基于ram的注冊(cè)表:1. windows ce提供了兩個(gè)系統(tǒng)api用來(lái)保存和還原整個(gè)注冊(cè)表,它們的原形如下:bool regcopyfile( lpcwstr lpszfile / 保存注冊(cè)表信息的文件的名字);bool regrestorefile( lpcwstr lpszfile / 保存注冊(cè)表信息的文件的名字);如果要保存和恢復(fù)注冊(cè)表
4、,我們只需要在系統(tǒng)斷電的時(shí)候調(diào)用regcopyfile函數(shù)將整個(gè)注冊(cè)表保存為外存上的一個(gè)文件。當(dāng)系統(tǒng)重新啟動(dòng)時(shí),我們?cè)僬{(diào)用regrestorefile函數(shù)將文件全部讀出ram中,然后再熱啟動(dòng)系統(tǒng),我們保存得注冊(cè)表就可以生效了。值得注意的是這次熱啟動(dòng)是必須的,因?yàn)橹挥性谙到y(tǒng)啟動(dòng)的時(shí)候才會(huì)去檢測(cè)regrestorefile放在ram里的注冊(cè)表信息。這種方法的優(yōu)點(diǎn)是完全可以使用應(yīng)用程序來(lái)實(shí)現(xiàn)基于ram的注冊(cè)表的保存,而且這種方法相對(duì)簡(jiǎn)單。但是此方法的缺點(diǎn)是需要兩次啟動(dòng)。因此效率相對(duì)比較低。2. 第二種方法需要oem的參與,oem可以在bsp的oal層中實(shí)現(xiàn)writeregistrytooem和rea
5、dregistryfromoem兩個(gè)函數(shù),它們的聲明為:dword readregistryfromoem( dword dwflags, / 參數(shù), reg_read_bytes_start表示讀新的注冊(cè)表 lpbyte lpdata, / 指向注冊(cè)表數(shù)據(jù)的緩沖區(qū),由os分配 dword cbdata / 緩沖區(qū)的大小);bool writeregistrytooem( dword dwflags, / 參數(shù),reg_write_bytes_start表示寫(xiě)新的注冊(cè)表 lpbyte lpdata, / 指向注冊(cè)表數(shù)據(jù)的緩沖區(qū),由os分配 dword cbdata / 緩沖區(qū)的大小,0表示到達(dá)
6、注冊(cè)表尾部);windows ce會(huì)在系統(tǒng)啟動(dòng)和關(guān)閉的時(shí)候調(diào)用這兩個(gè)函數(shù)來(lái)保存和恢復(fù)注冊(cè)表。此種方法雖然可以避免兩次啟動(dòng),但是困難的地方是readregistryfromoem函數(shù)的實(shí)現(xiàn)比較困難,因?yàn)樵谙到y(tǒng)啟動(dòng)的時(shí)候,塊設(shè)備驅(qū)動(dòng)和文件系統(tǒng)的驅(qū)動(dòng)都還沒(méi)有加載,因此不能使用createfile,readfile這樣的文件系統(tǒng)api來(lái)實(shí)現(xiàn)readregistryfromoem函數(shù),只能使用一些更底層的操作來(lái)實(shí)現(xiàn)。 基于hive的注冊(cè)表自從windows ce 4.0之后,windows ce提供了基于hive的注冊(cè)表?;趆ive的注冊(cè)表把注冊(cè)表數(shù)據(jù)存放在文件系統(tǒng)的文件上,這種文件被稱(chēng)作蜂箱hive
7、。這就意味著不再需要在系統(tǒng)斷電和啟動(dòng)時(shí)進(jìn)行保存恢復(fù)注冊(cè)表操作。hive是注冊(cè)表中的一組鍵,子鍵和值。hive是文件系統(tǒng)上表現(xiàn)為單個(gè)文件。windows ce中有三種hive。類(lèi)型 文件 描述boot hive rom中的boot.hv hkey_local_machine, hkey_classes_root, hkey_users中的所有數(shù)據(jù)。只在啟動(dòng)時(shí)使用。system hive 由oem決定(通常是system.hv) hkey_local_machine, hkey_classes_root, hkey_users中的所有數(shù)據(jù)。包含設(shè)備范圍內(nèi)不隨著用戶(hù)改變而改變的數(shù)據(jù)。user hiv
8、e user.hv hkey_current_user下的所有數(shù)據(jù)。 包含用戶(hù)特有的設(shè)置,每個(gè)用戶(hù)都有一個(gè)單獨(dú)的user.hv?;趆ive的注冊(cè)表適用于對(duì)于有永久存儲(chǔ)并且需要經(jīng)常冷啟動(dòng)的設(shè)備。我們也可以看到,基于hive的注冊(cè)表把系統(tǒng)數(shù)據(jù)和用戶(hù)數(shù)據(jù)分開(kāi)存放,這就意味著基于hive的注冊(cè)表還提供多用戶(hù)支持。對(duì)于每一個(gè)用戶(hù),可以提供不同的user.hv,當(dāng)用戶(hù)登錄時(shí)加載相應(yīng)的user.hv,從而達(dá)到多用戶(hù)目的。注冊(cè)表類(lèi)型分為基于對(duì)象存儲(chǔ)的注冊(cè)表和基于hive的注冊(cè)表,在制定內(nèi)核的時(shí)候只能選擇其中一種。從理論上講這兩種注冊(cè)表都能夠?qū)崿F(xiàn)永久保存注冊(cè)表數(shù)據(jù),不過(guò)采用不同的類(lèi)型會(huì)影響ce的啟動(dòng)順序和啟動(dòng)
9、速度,還會(huì)影響內(nèi)存的使用量。我還是趨向于采用基于hive的注冊(cè)表來(lái)實(shí)現(xiàn)永久保存注冊(cè)表數(shù)據(jù),這也是個(gè)發(fā)展趨勢(shì)。在講解之前先簡(jiǎn)單描述如果ce采用基于hive的注冊(cè)表,那么在啟動(dòng)時(shí)怎么加載已保存的注冊(cè)表數(shù)據(jù):1、nk.exe執(zhí)行,啟動(dòng)filesys.exe。2、filesys.exe加載引導(dǎo)hive,此時(shí)引導(dǎo)hive位于nk.bin解壓之后的文件中。3、filesys.exe啟動(dòng)device.exe,之后處于等待狀態(tài),等待device.exe將包含系統(tǒng)hive的文件系統(tǒng)和存儲(chǔ)設(shè)備的驅(qū)動(dòng)程式加載完畢。而這個(gè)文件系統(tǒng)和存儲(chǔ)設(shè)備的驅(qū)動(dòng)程式存在于引導(dǎo)hive中。4、device.exe加載上述所說(shuō)的文件系統(tǒng)
10、驅(qū)動(dòng)程式和存儲(chǔ)設(shè)備驅(qū)動(dòng)程式,使之開(kāi)始工作。之后device.exe處于等待狀態(tài)。5、filesys.exe被喚醒,加載并且安裝系統(tǒng)hive。之后filesys.exe處于等待狀態(tài)。6、nk.exe按照系統(tǒng)hive的信息開(kāi)始執(zhí)行初始化工作。其中包括加載驅(qū)動(dòng)程式和啟動(dòng)一些應(yīng)用程式。其中加載驅(qū)動(dòng)程式一般由device.exe執(zhí)行,而啟動(dòng)應(yīng)用程式由filesys.exe執(zhí)行。這時(shí)device.exe和filesys.exe已被喚醒。因?yàn)橐龑?dǎo)hive和系統(tǒng)hive肯定有重復(fù)的地方,所以可能出現(xiàn)重復(fù)加載了驅(qū)動(dòng)程式或重復(fù)啟動(dòng)了應(yīng)用程式。為此,ce允許在描述驅(qū)動(dòng)程式的注冊(cè)表信息中加入防止重復(fù)的標(biāo)志,而應(yīng)用程式
11、能采用事件對(duì)象來(lái)防止重復(fù)啟動(dòng),如device.exe。下面講述怎么設(shè)置基于hive的注冊(cè)表(如果保存系統(tǒng)hive的是fat文件系統(tǒng)):1、在pb中加入hive-based registry,如果是geode平臺(tái),再加入bsp_enable_fsreghive環(huán)境變量。2、打開(kāi)platform.reg,找到如下信息:; hive boot sectionhkey_local_machineinitbootvarssystemhive=documents and settingssystem.hvprofiledir=documents and settingsstart devmgr=dword
12、:0if bsp_enable_fsreghive start devmgr=dword:1endif ; end hive boot sectionsystemhive的值為系統(tǒng)hive文件的路徑。start devmgr是個(gè)布爾值,指示是否開(kāi)始就執(zhí)行設(shè)備管理器device.exe,按照ce幫助文件的說(shuō)法,只有想把系統(tǒng)hive存儲(chǔ)在對(duì)象存儲(chǔ)中才在此設(shè)置為0,所以一般都要設(shè)置為1。3、如果是多用戶(hù),能在上述的注冊(cè)表位置下輸入defaultuser=,指定默認(rèn)的用戶(hù)名。如果是單用戶(hù)系統(tǒng),能不設(shè)置。4、確保將包含系統(tǒng)hive的文件系統(tǒng)驅(qū)動(dòng)程式的注冊(cè)表信息和存儲(chǔ)設(shè)備的驅(qū)動(dòng)程式的注冊(cè)表信息被包含在“;
13、 hive boot section”和“; end hive boot section”之間,在這兩個(gè)語(yǔ)句之間的注冊(cè)表數(shù)據(jù)全部屬于引導(dǎo)hive。如果我們將系統(tǒng)hive文件system.hv存放在硬盤(pán)上,并采用fat文件系統(tǒng)。那么就要將hkey_local_machinesystemstoragemanagerfatfs和hkey_local_machinesystemstoragemanagerprofileshdprofile移動(dòng)到“; hive boot section”下。5、在“; hive boot section”和“; end hive boot section”之間的所有驅(qū)動(dòng)
14、程式的注冊(cè)表信息中都加入下列一個(gè)標(biāo)志: flags=dword:1000這個(gè)標(biāo)志是個(gè)位掩碼,他能和其他已存在的flags或運(yùn)算。值1000表示此驅(qū)動(dòng)程式只加載一次,這樣device.exe就不會(huì)把當(dāng)前驅(qū)動(dòng)程式加載兩次了。6、在包含系統(tǒng)hive的存儲(chǔ)設(shè)備的驅(qū)動(dòng)程式的注冊(cè)表信息中,加入如下標(biāo)志(假設(shè)是硬盤(pán)):hkey_local_machinesystemstoragemanagerprofileshdprofilemountflags=dword:2這個(gè)標(biāo)志表示這個(gè)存儲(chǔ)設(shè)備包含系統(tǒng)hive文件。按照如上所述設(shè)置后的內(nèi)核就能實(shí)現(xiàn)永久存儲(chǔ)注冊(cè)表數(shù)據(jù)了。對(duì)于保存注冊(cè)表數(shù)據(jù)的執(zhí)行動(dòng)作在此必須闡述清晰:正
15、常情況下,ce能夠確保重要的注冊(cè)表數(shù)據(jù)能夠從內(nèi)存刷到(flush)永久存儲(chǔ)器上。不過(guò)這并不能完全確保所有數(shù)據(jù)都能完整地保存而不丟失,所以要確保萬(wàn)無(wú)一失,應(yīng)該主動(dòng)地調(diào)用regflushkey函數(shù)強(qiáng)制將內(nèi)存中的數(shù)據(jù)刷到永久存儲(chǔ)器上。這個(gè)函數(shù)的參數(shù)只有一個(gè),就是注冊(cè)表分支。ce還增加一個(gè)注冊(cè)表項(xiàng)(如下所示),他的作用是每當(dāng)函數(shù)regclosekey被調(diào)用時(shí)都自動(dòng)調(diào)用regflushkey函數(shù)。hkey_local_machineinitbootvarsregistryflags=dword:1如果ce在啟動(dòng)過(guò)程中發(fā)現(xiàn)系統(tǒng)hive出現(xiàn)錯(cuò)誤,他會(huì)自動(dòng)刪除文件并創(chuàng)建一個(gè)默認(rèn)的系統(tǒng)hive文件,如果出現(xiàn)下面
16、的注冊(cè)表項(xiàng),說(shuō)明發(fā)生了這種事情。windows ce下訪問(wèn)物理內(nèi)存的方法嵌入式設(shè)備與桌面pc的一個(gè)顯著不同是它的應(yīng)用程序中通常需要直接訪問(wèn)某一段物理內(nèi)存,這在驅(qū)動(dòng)程序中對(duì)物理內(nèi)存的訪問(wèn)尤為重要,尤其是像arm體系結(jié)構(gòu)下,i/o端口也被映射成某一個(gè)物理內(nèi)存地址。因此,與桌面版本windows相比,windows ce提供了相對(duì)簡(jiǎn)單的物理內(nèi)存訪問(wèn)方式。無(wú)論是驅(qū)動(dòng)程序還是應(yīng)用程序都可以通過(guò)api訪問(wèn)某一段物理內(nèi)存。windows ce的有些函數(shù)中需要用到物理內(nèi)存結(jié)構(gòu)體physical_address, windows ce在ceddk.h中定義了physical_address,它其實(shí)是large_
17、integer類(lèi)型,其定義如下:/ in ceddk.htypedef large_integer physical_address, *pphysical_address;/ in winnt.htypedef union _large_integerstruct dword lowpart; long highpart;longlong quadpart; large_integer;可見(jiàn),windows ce中用64個(gè)bit來(lái)代表物理地址,對(duì)于大多數(shù)32位的cpu而言,只需要把它的highpart設(shè)置為0就可以了。如果要直接訪問(wèn)某一個(gè)地址的物理內(nèi)存,windows ce提供了virtua
18、lalloc()和virtualcopy()函數(shù),virtualalloc負(fù)責(zé)在虛擬內(nèi)存空間內(nèi)保留一段虛擬內(nèi)存,而virtualcopy負(fù)責(zé)把一段物理內(nèi)存和虛擬內(nèi)存綁定,這樣,最終對(duì)物理內(nèi)存的訪問(wèn)還是通過(guò)虛擬地址進(jìn)行。它們的聲明如下:/ 申請(qǐng)?zhí)摂M內(nèi)存lpvoid virtualalloc(lpvoid lpaddress, / 希望的虛擬內(nèi)存起始地址dword dwsize, / 以字節(jié)為單位的大小dword flallocationtype, / 申請(qǐng)類(lèi)型,分為reserve和commitdword flprotect / 訪問(wèn)權(quán)限);/ 把物理內(nèi)存綁定到虛擬地址空間bool virtual
19、copy( lpvoid lpvdest, / 虛擬內(nèi)存的目標(biāo)地址lpvoid lpvsrc, / 物理內(nèi)存地址dword cbsize, / 要綁定的大小dword fdwprotect / 訪問(wèn)權(quán)限);virtualalloc對(duì)虛擬內(nèi)存的申請(qǐng)分為兩步,保留mem_reserve和提交mem_commit。其中mem_reserve只是在進(jìn)程的虛擬地址空間內(nèi)保留一段,并不分配實(shí)際的物理內(nèi)存,因此保留的虛擬內(nèi)存并不能被應(yīng)用程序直接使用。mem_commit階段才真正的為虛擬內(nèi)存分配物理內(nèi)存。下面的代碼顯示了如何使用virtualalloc和virtualcopy來(lái)訪問(wèn)物理內(nèi)存。因?yàn)関irtua
20、lcopy負(fù)責(zé)把一段物理內(nèi)存和虛擬內(nèi)存綁定,所以virtualalloc的時(shí)候只需要對(duì)內(nèi)存保留,沒(méi)有必要提交。fpdriverglobals = (pdriver_globals) virtualalloc( 0, driver_globals_physical_memory_size, mem_reserve, page_noaccess);if (fpdriverglobals = null) errormsg(driver_error_msg, (text( virtualalloc failed!rn); return;else if (!virtualcopy( (pvoid)fpd
21、riverglobals, (pvoid)(driver_globals_physical_memory_start), driver_globals_physical_memory_size, (page_readwrite | page_nocache) errormsg(driver_error_msg, (text(virtualcopy failed!rn); return; ceddk還提供了函數(shù)mmmapiospace用來(lái)把一段物理內(nèi)存直接映射到虛擬內(nèi)存。此函數(shù)的原形如下:pvoid mmmapiospace( physical_address physicaladdress,
22、/ 起始物理地址ulong numberofbytes, / 要映射的字節(jié)數(shù)boolean cacheenable / 是否緩存);其實(shí),mmmapiospace函數(shù)內(nèi)部也是調(diào)用virtualalloc和virtualcopy函數(shù)來(lái)實(shí)現(xiàn)物理地址到虛擬地址的映射的。mmmapiospace函數(shù)的原代碼是公開(kāi)的,我們可以從%_winceroot%publiccommonoakdriversceddkddk_mapddk_map.c得到。從mmmapiospace的實(shí)現(xiàn)我們也可以看出virtualalloc和virtualcopy的用法:pvoid mmmapiospace ( in physica
23、l_address physicaladdress, in ulong numberofbytes, in boolean cacheenable )pvoid pvirtualaddress; ulonglong sourcephys; ulong sourcesize; bool bsuccess; sourcephys = physicaladdress.quadpart & (page_size - 1); sourcesize = numberofbytes + (physicaladdress.lowpart & (page_size - 1); pvirtualaddress =
24、 virtualalloc(0, sourcesize, mem_reserve, page_noaccess); if (pvirtualaddress != null) bsuccess = virtualcopy( pvirtualaddress, (pvoid)(sourcephys 8), sourcesize, page_physical | page_readwrite | (cacheenable ? 0 : page_nocache); if (bsuccess) (ulong)pvirtualaddress += physicaladdress.lowpart & (pag
25、e_size - 1); else virtualfree(pvirtualaddress, 0, mem_release); pvirtualaddress = null; return pvirtualaddress;此外,windows ce還供了allocphysmem函數(shù)和freephysmem函數(shù),用來(lái)申請(qǐng)和釋放一段連續(xù)的物理內(nèi)存。函數(shù)可以保證申請(qǐng)的物理內(nèi)存是連續(xù)的,如果函數(shù)成功,會(huì)返回虛擬內(nèi)存的句柄和物理內(nèi)存的起始地址。這對(duì)于dma設(shè)備尤為有用。在這里就不詳細(xì)介紹了,讀者可以參考windows ce的聯(lián)機(jī)文檔wince6.0注冊(cè)表windows ce 6.0有4個(gè)基本的注冊(cè)表鍵值
26、, hkey_classes_root, hkey_current_user, hkey_local_machine, hkey_users。其它的都是這4個(gè)注冊(cè)表的子鍵。我 們以一個(gè)內(nèi)建的串口驅(qū)動(dòng)為例,它在注冊(cè)表文件platform.reg中的描述如下: 其中prefix 和 dll項(xiàng)是必不可少的,prefix代表設(shè)備文件名前綴, 與index合用表示該設(shè)備的名稱(chēng),該注冊(cè)表子鍵的設(shè)備名稱(chēng)就是com1:,該名稱(chēng)可以用于createfile調(diào)用。dll則是動(dòng)態(tài)鏈接庫(kù)名稱(chēng)。 index為設(shè)備序號(hào)。flags為1表示系統(tǒng)啟動(dòng)時(shí)不加載,需要應(yīng)用程序自己加載,為0表示該驅(qū)動(dòng)在系統(tǒng)啟動(dòng)時(shí)加載。 hkey_
27、local_machinedriversbuiltinserial prefix=com dll=$(_tgtplat_pfx)_serial.dll flags=dword:0 index=dword:1在%wince dir%public%common%oak%inc%目錄下,文件cregedit.h中,定義了一個(gè)類(lèi)cregistryedit來(lái)封裝了注冊(cè)表的操作。許多的硬件驅(qū)動(dòng),比如串口類(lèi),也繼承了cregistryedit類(lèi)。還有一種方法是利用windows ce提供的api進(jìn)行注冊(cè)表項(xiàng)的操作。方法一: 利用系統(tǒng)提供的注冊(cè)表類(lèi)cregistryedit 類(lèi)的定義在文件regedit.h中
28、。 在 構(gòu)建函數(shù)中,會(huì)取得當(dāng)前注冊(cè)表子鍵的handle句柄。有3個(gè)構(gòu)造函數(shù),第一個(gè)是用全路徑,調(diào)用hkey = opendevicekey(text(hkey_local_machinedriversbuiltinserial)構(gòu)造, 第二個(gè)是如果已知其父注冊(cè)表子鍵,調(diào)用regopenkeyex( hkey_local_machine, text(driversbuiltinserial), 0,0,&hkey). 第三種方法是用regcreatekeyex(). 析構(gòu)函數(shù)中,調(diào)用regclosekey(hkey)關(guān)閉掉對(duì)注冊(cè)表子鍵的引用。 讀取注冊(cè)表項(xiàng)可以使用getregvalue方法,寫(xiě)入
29、注冊(cè)表項(xiàng)使用regsetvalueex方法。其方法的實(shí)現(xiàn)也是通過(guò)windows ce api,具體可以參照下一個(gè)section。 reggetlist和regsetlist方法提供了對(duì)類(lèi)型為reg_multi_sz和dword的value的讀寫(xiě)操作。 其它類(lèi)方法getwindowinfo, getisrinfo,getpciinfo獲取注冊(cè)表更多的信息。方法二: 利用windows ce api 為 了獲取一個(gè)注冊(cè)表鍵值,先要調(diào)用regopenkeyex。以上面內(nèi)建串口驅(qū)動(dòng)為例,regopenkey( hkey_local_machine, text(driversbuiltinserial)
30、, 0, 0, &hkey ), 其中hkey就是我們獲取的該注冊(cè)表子鍵的handle句柄。接下來(lái)對(duì)注冊(cè)表子鍵的操作就是通過(guò)hkey來(lái)實(shí)現(xiàn). 有了hkey, 就可以對(duì)注冊(cè)表子鍵的各個(gè)內(nèi)容進(jìn)行讀寫(xiě)操作。如果要讀去子鍵的prefix, 調(diào)用函數(shù)regqueryvalueex(hkey, text(prefix), null, &lptype, &lpdata, &lpcbdata), lptype, lpdata為prefix返回類(lèi)型和值,該例中,lptype = reg_sz, lpdata = text(com). lpcbdata當(dāng)調(diào)用時(shí),修飾限制lpdata的size in bytes,返
31、回時(shí),為lpdata返回值的size。 對(duì)應(yīng)于讀操作,寫(xiě)操作是一個(gè)相反的過(guò)程,regsetvalueex(hkey, text(prefix), null, reg_sz, pbyte(text(tst), wcslen(text(tst)*2). 其中要寫(xiě)入的項(xiàng)為prefix項(xiàng),類(lèi)型為reg_sz, 值為text(tst), 最后一個(gè)參數(shù)為寫(xiě)入值得size in bytes. 注意第二個(gè)參數(shù),如果注冊(cè)表中存在該項(xiàng),則改寫(xiě)它的值。如果沒(méi)有,則新建一個(gè)注冊(cè)表項(xiàng)。 某些情況下,我們需要?jiǎng)h除一個(gè)注冊(cè)表項(xiàng),只需調(diào)用regdeletekey(hkey, text(index)就可以刪除index注冊(cè)表項(xiàng)
32、。 要關(guān)閉一個(gè)注冊(cè)表子鍵,只需要調(diào)用regclosekey(hkey)就可以完成。總結(jié): 關(guān)于注冊(cè)表有很多更加深入的使用,如regenumvalue. 更多有關(guān)注冊(cè)表項(xiàng),可以查看msdn手冊(cè)。注冊(cè)表分兩種一種叫rom ,一種hive如果注冊(cè)表是固定的(每一臺(tái)設(shè)備是一樣的),可以在platform.reg,project.reg還有common.reg中先設(shè)置好,然后再重新build 如果需要保存一些個(gè)性化的信息,在h/w reset后還需要恢復(fù)這些信息,而且每一臺(tái)設(shè)備中注冊(cè)表是不一樣的,那就用mikemao(mikemao) 所說(shuō)的方法,不過(guò)不是系統(tǒng)啟動(dòng)后再寫(xiě)一遍,而是在啟動(dòng)的過(guò)程中就設(shè)定注冊(cè)
33、表。一般的產(chǎn)品很少用這種方法的,因?yàn)橐WCh/w reset后回到出廠狀態(tài),不過(guò)我們公司的產(chǎn)品中就用了第二種方法,這種方法實(shí)現(xiàn)要復(fù)雜一點(diǎn),有興趣的話再探討。問(wèn)題解決:1 要把platform中得注冊(cè)表設(shè)置為hive 2 再代碼中保存的時(shí)候使用fulshkey()wince注冊(cè)表簡(jiǎn)介在wince中支持兩種類(lèi)型的注冊(cè)表:ram-based和hive-based,默認(rèn)情況下使用的是ram-based注冊(cè)表。 1.ram-based注冊(cè)表 ram-based的注冊(cè)表是將所有的注冊(cè)表數(shù)據(jù)存儲(chǔ)在對(duì)象存儲(chǔ)(object store)中,也就是存放在ram里面。一般用在有電池備份ram的系統(tǒng)上面,也就是說(shuō),當(dāng)
34、系統(tǒng)掉電以后,會(huì)自動(dòng)切換成電池供電,此時(shí)ram還有供電,所以上面的數(shù)據(jù)不會(huì)丟失,這樣采用ram-based注冊(cè)表非常有效。ram-based注冊(cè)表多用于經(jīng)常熱啟動(dòng)(warm boot)的設(shè)備上面,很少用在冷啟動(dòng)(cold boot)設(shè)備上面。2.hive-based注冊(cè)表 hive-based的注冊(cè)表是將注冊(cè)表數(shù)據(jù)存成文件,也就是存在掉電不會(huì)丟失數(shù)據(jù)的磁盤(pán)上面,hive注冊(cè)表被分成兩部分:系統(tǒng)hive和用戶(hù)hive,也就是system.hv和user.hv。在一個(gè)多用戶(hù)系統(tǒng)中,會(huì)包含多個(gè)用戶(hù)hive,不同的用戶(hù)hive(user.hv)會(huì)在該用戶(hù)登陸的時(shí)候被加載,被注銷(xiāo)的時(shí)候卸載。實(shí)際上hiv
35、e-based的注冊(cè)表包含三個(gè)部分,我稱(chēng)之為引導(dǎo)hive,系統(tǒng)hive和用戶(hù)hive,也就是boot.hv,system.hv和user.hv。boot.hv主要用于系統(tǒng)引導(dǎo)時(shí)候所需的注冊(cè)表設(shè)置,這部分設(shè)置不會(huì)被保存在磁盤(pán)上面,也就是說(shuō),在系統(tǒng)掉電以后就會(huì)丟失。實(shí)際上,這部分應(yīng)該說(shuō)是屬于ram-based注冊(cè)表,由于這部分?jǐn)?shù)據(jù)不需要改動(dòng),所以也就無(wú)所謂了。system.hv存放關(guān)于系統(tǒng)的注冊(cè)表設(shè)置,user.hv存放和用戶(hù)相關(guān)的注冊(cè)表設(shè)置。一般在我們編譯wince系統(tǒng)的時(shí)候,platform builder會(huì)根據(jù)platform.reg文件中的注釋標(biāo)簽來(lái)判斷哪些注冊(cè)表設(shè)置放入boot.hv中,
36、凡是在注釋標(biāo)簽”;hive boot secton”和”;end hive boot section”之間的設(shè)置都會(huì)被放入boot.hv中,其他的都會(huì)放到default.hv和user.hv中。在wince第一次引導(dǎo)的時(shí)候,所有的.hv都會(huì)被放到ram中,wince系統(tǒng)會(huì)首先讀取boot.hv進(jìn)行相關(guān)引導(dǎo)時(shí)候的設(shè)置,然后把default.hv和user.hv放到磁盤(pán)的指定路徑下面,這個(gè)路徑也是在注冊(cè)表中設(shè)置的,然后default.hv會(huì)被重命名為system.hv。當(dāng)系統(tǒng)第二次啟動(dòng)的時(shí)候,會(huì)比較磁盤(pán)上的.hv和內(nèi)存中的.hv是否一致,如果不一致,會(huì)拷貝磁盤(pán)上面的.hv到內(nèi)存中。我們可以看出,實(shí)
37、際上hive注冊(cè)表在運(yùn)行的時(shí)候也是放在ram中的,這樣速度比較快。啟動(dòng)的時(shí)候會(huì)從磁盤(pán)上讀出,在用戶(hù)更改注冊(cè)表以后,會(huì)被保存在磁盤(pán)上,保存的時(shí)機(jī)也是可以設(shè)置的,可以選擇在用戶(hù)更改后立刻保存到磁盤(pán)上,也可以選擇在reboot的時(shí)候保存。wince注冊(cè)表應(yīng)用/author:/norains/date:/tuesday 25-april -2006/=1.讓桌面不顯示我的電腦,回收站刪除以下鍵值:hkey_local_machineexplorerdesktop000214a0-0000-0000-c000-000000000046 ;my computer000214a1-0000-0000-c00
38、0-000000000046 ;recycle bin存在這兩個(gè)鍵值的文件有:$(_winceroot)publicshelloakfilesshell.reg$(_winceroot)publicwceshellfeoakfileswceshellfe.reg$(_winceroot)publicwceshellfeoakfileswceshellfe88.reg2.直接刪除文件,不放回回收站hkey_local_machineexploreruserecyclebin=dword:0 ;設(shè)置0為直接刪除;設(shè)置1為放入回收站3.修改xp皮膚的系統(tǒng)界面顏色如果選擇了xp skin,則在控制面板
39、的顯示選項(xiàng)中是無(wú)法更改一些窗口的顏色的.不過(guò),我們倒是可以通過(guò)更改$(_winceroot)publiccommonoakfilescommon.reg文件中的xp顏色參數(shù)來(lái)達(dá)到更改窗口顏色的目的.原xp樣式的顏色參數(shù)如下:hkey_local_machinesystemgwe syscolor=hex: 00,00,00,00, 3a,6e,a5,00, 00,00,00,00, 00,00,00,00, ef,eb,de,00, ff,ff,ff,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, ff,ff,ff,00, c0,c0,c0,00, c0,
40、c0,c0,00, 80,80,80,00, 31,69,c6,00, ff,ff,ff,00, ef,eb,de,00, ad,aa,9c,00, 80,80,80,00, 00,00,00,00, 00,00,00,00, ff,ff,ff,00, 73,6d,63,00, ff,ff,ff,00, 00,00,00,00, ff,ff,e1,00, ef,eb,de,00, 00,00,00,00代表的意思是:0 color_scrollbar color of the gray area of a scroll bar.1 color_background background col
41、or of the desktop window.2 color_activecaption color of the title bar of an active window.3 color_inactivecaption color of the title bar of an inactive window.4 color_menu background color of a menu.5 color_window background color of a window.6 color_windowframe color of a window frame.7 color_menut
42、ext color of the text in a menu.8 color_windowtext color of the text in a window.9 color_captiontext color of the text in a title bar and of the size box and scroll bar arrow box.10 color_activeborder color of the border of an active window.11 color_inactiveborder color of the border of an inactive
43、window.12 color_appworkspace background color of multiple document interface (mdi) applications.13 color_highlight color of an item selected in a control.14 color_highlighttext color of the text of an item selected in a control.15 color_btnface color of the face of a button.16 color_btnshadow shadow
44、 color of buttons for edges that face away from the light source.17 color_graytext color of shaded text. this color is set to 0 if the current display driver does not support a solid gray color.18 color_btntext color of the text for push buttons.19 color_inactivecaptiontext color of the text in the
45、title bar of an inactive window.20 color_btnhighlight highlight color of buttons for edges that face the light source.21 color_3ddkshadow color of the dark shadow for three-dimensional display elements.22 color_3dlight highlight color of three-dimensional display elements for edges that face the lig
46、ht source.23 color_infotext color of the text for tooltip controls.24 color_infobk background color for tooltip controls.25 color_static background color for static controls and dialog boxes. supported in windows ce 2.0 and later.26 color_statictext color of the text for static controls. supported i
47、n windows ce 2.0 and later.27 color_gradientactivecaption color of the title bar of an active window that is filled with a color gradient.28 color_gradientinactivecaption4.文件夾映射更改假設(shè)我們要將桌面文件夾從根目錄(在這里指的是ram空間)移動(dòng)到某個(gè)外部?jī)?chǔ)存器harddisk中,可以按如下步驟:1.將$(_winceroot)publiccommonoakfilesintltrns0804common.str文件中的loc
48、_path_desktop宏定義改為harddiskwindows桌面2.然后將所有.dat文件中關(guān)于loc_desktop_dir的選項(xiàng),全部在windows前添加harddisk,如:directory(windowsloc_desktop_dir):-file(loc_internetexplorer_lnk, windowsiesample.lnk)改為:directory(harddiskwindowsloc_desktop_dir):-file(loc_internetexplorer_lnk, windowsiesample.lnk)即可.如果有創(chuàng)建文件夾的話,也要改:如:roo
49、t:-directory(loc_programfiles_dir)改為:root:-directory(harddiskloc_programfiles_dir)wince 注冊(cè)表文件 platform.reg 詳解一、hive 注冊(cè)表功能 hkey_local_machineinitbootvars systemhive=documents and settingssystem.hv profiledir=documents and settings defaultuser=default start devmgr=dword:1 flags=dword:3 registryflags=d
50、word:1 說(shuō)明: systemhiv 系統(tǒng)hive文件的保存路徑與文件名 profiledir 用戶(hù)配置文件保存路徑 defaultuser 默認(rèn)加載的用戶(hù)hive文件 start devmgr 啟動(dòng)時(shí)加載設(shè)備管理器 flags 這個(gè)值替代start devmgr,可以在包括start devmgr的功能前提下提供更精確的控制 flag bit setting description 0x00000001 starts storage manager in phase one of startup for hive-based registry (為了實(shí)現(xiàn)hive,啟動(dòng)時(shí)加載存儲(chǔ)管理器)
51、0x00000002 starts device manager in phase one of startup for hive-based registry (為了實(shí)現(xiàn)hive,啟動(dòng)時(shí)加載設(shè)備管理器) 0x00000004 starts storage manager in phase one of startup for registry in external rom, such as binfs (為了注冊(cè)擴(kuò)展rom例如binfs,在啟動(dòng)時(shí)加載存儲(chǔ)管理器) 0x00000008 starts device manager in phase one of startup for registry in external rom, such as binfs (為了注冊(cè)擴(kuò)展rom例如binfs,在啟動(dòng)時(shí)加載設(shè)備管理器) registryflags 在調(diào)用regclosekey函數(shù)時(shí)自動(dòng)調(diào)用regflushkey函數(shù),用于自動(dòng)保存注冊(cè)表 設(shè)備管理器會(huì)加載 hkey_local_machinedriversbuiltin 下的所有設(shè)備驅(qū)動(dòng) 二、存儲(chǔ)管理 hkey_local_machinesystemstoragemanagerprofiles automount=dword:1 a
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度廠房電氣系統(tǒng)升級(jí)改造合同范本4篇
- 2024新版二手房定金支付合同樣本版
- 二零二五年度新材料研發(fā)承包生產(chǎn)合同3篇
- 二零二四屬公積金貸款合同簽訂后的貸后審計(jì)與合規(guī)性檢查3篇
- 2024預(yù)定房屋買(mǎi)賣(mài)協(xié)議書(shū)
- 個(gè)人農(nóng)田租賃承包協(xié)議:2024年標(biāo)準(zhǔn)范本一
- 2024年04月江西九江銀行萍鄉(xiāng)分行社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024年04月四川興業(yè)銀行瀘州分行招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024版有限責(zé)任公司發(fā)起人協(xié)議書(shū)
- 2024年03月浙江中國(guó)工商銀行浙江平湖工銀村鎮(zhèn)銀行春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2024-2030年中國(guó)通航飛行服務(wù)站(FSS)行業(yè)發(fā)展模式規(guī)劃分析報(bào)告
- 機(jī)械制造企業(yè)風(fēng)險(xiǎn)分級(jí)管控手冊(cè)
- 地系梁工程施工方案
- 藏文基礎(chǔ)-教你輕輕松松學(xué)藏語(yǔ)(西藏大學(xué))知到智慧樹(shù)章節(jié)答案
- 2024電子商務(wù)平臺(tái)用戶(hù)隱私保護(hù)協(xié)議3篇
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 英語(yǔ) 含答案
- 電力工程施工安全風(fēng)險(xiǎn)評(píng)估與防控
- 醫(yī)學(xué)教程 常見(jiàn)體表腫瘤與腫塊課件
- 內(nèi)分泌系統(tǒng)異常與虛勞病關(guān)系
- 智聯(lián)招聘在線測(cè)評(píng)題
- DB3418T 008-2019 宣紙潤(rùn)墨性感官評(píng)判方法
評(píng)論
0/150
提交評(píng)論