wince注冊表結(jié)構(gòu)_第1頁
wince注冊表結(jié)構(gòu)_第2頁
wince注冊表結(jié)構(gòu)_第3頁
wince注冊表結(jié)構(gòu)_第4頁
wince注冊表結(jié)構(gòu)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、wince注冊表結(jié)構(gòu)與桌面windows一樣,windows ce也使用注冊表(registry)來保存應(yīng)用程序、驅(qū)動程序和用戶的設(shè)定以及其他一些配置信息。windows ce注冊表也采用樹形結(jié)構(gòu)來管理配置信息,由于windows ce注冊表的結(jié)構(gòu)和功能與桌面windows幾乎一樣,在這里就不詳細(xì)介紹了,讀者可以參考其它關(guān)于注冊表的資料。windows ce支持四個根鍵,描述如下:鍵名 描述hkey_local_machine 硬件和驅(qū)動配置數(shù)據(jù)hkey_current_user 用戶配置數(shù)據(jù)hkey_classes_root ole和文件類型匹配配置數(shù)據(jù)hkey_users 適用于所有用戶的

2、數(shù)據(jù)由于嵌入式系統(tǒng)的特點,一些嵌入式設(shè)備是沒有外存的。因此windows ce的注冊表提供了兩種實現(xiàn)方式:基于ram的注冊表(ram-based registry)和基于hive的注冊表(hive-based registry)。我們可以選擇在windows ce中使用任何一種注冊表,注冊表類型對于用戶和應(yīng)用程序來說是透明的。 基于ram的注冊表正如其名,基于ram的注冊表把整個注冊表作為一個對象存儲堆存放在系統(tǒng)的內(nèi)存中。這意味著如果對系統(tǒng)進(jìn)行冷啟動或者系統(tǒng)斷電,對注冊表的所有改動都會丟失。如果使用基于ram的注冊表,對注冊表的讀寫訪問操作會變得非常高效。因此基于ram的注冊表比較適用于沒有外

3、部存儲,而且有電池保存內(nèi)存數(shù)據(jù)(battery-backed ram)的設(shè)備。如果有外存且經(jīng)常冷啟動的設(shè)備采用基于ram的注冊表,則需要在系統(tǒng)斷電的時候?qū)ψ员磉M(jìn)行保存,等系統(tǒng)再次啟動時對保存的注冊表進(jìn)行還原。windows ce提供了兩種方法用來斷電保存基于ram的注冊表:1. windows ce提供了兩個系統(tǒng)api用來保存和還原整個注冊表,它們的原形如下:bool regcopyfile( lpcwstr lpszfile / 保存注冊表信息的文件的名字);bool regrestorefile( lpcwstr lpszfile / 保存注冊表信息的文件的名字);如果要保存和恢復(fù)注冊表

4、,我們只需要在系統(tǒng)斷電的時候調(diào)用regcopyfile函數(shù)將整個注冊表保存為外存上的一個文件。當(dāng)系統(tǒng)重新啟動時,我們再調(diào)用regrestorefile函數(shù)將文件全部讀出ram中,然后再熱啟動系統(tǒng),我們保存得注冊表就可以生效了。值得注意的是這次熱啟動是必須的,因為只有在系統(tǒng)啟動的時候才會去檢測regrestorefile放在ram里的注冊表信息。這種方法的優(yōu)點是完全可以使用應(yīng)用程序來實現(xiàn)基于ram的注冊表的保存,而且這種方法相對簡單。但是此方法的缺點是需要兩次啟動。因此效率相對比較低。2. 第二種方法需要oem的參與,oem可以在bsp的oal層中實現(xiàn)writeregistrytooem和rea

5、dregistryfromoem兩個函數(shù),它們的聲明為:dword readregistryfromoem( dword dwflags, / 參數(shù), reg_read_bytes_start表示讀新的注冊表 lpbyte lpdata, / 指向注冊表數(shù)據(jù)的緩沖區(qū),由os分配 dword cbdata / 緩沖區(qū)的大小);bool writeregistrytooem( dword dwflags, / 參數(shù),reg_write_bytes_start表示寫新的注冊表 lpbyte lpdata, / 指向注冊表數(shù)據(jù)的緩沖區(qū),由os分配 dword cbdata / 緩沖區(qū)的大小,0表示到達(dá)

6、注冊表尾部);windows ce會在系統(tǒng)啟動和關(guān)閉的時候調(diào)用這兩個函數(shù)來保存和恢復(fù)注冊表。此種方法雖然可以避免兩次啟動,但是困難的地方是readregistryfromoem函數(shù)的實現(xiàn)比較困難,因為在系統(tǒng)啟動的時候,塊設(shè)備驅(qū)動和文件系統(tǒng)的驅(qū)動都還沒有加載,因此不能使用createfile,readfile這樣的文件系統(tǒng)api來實現(xiàn)readregistryfromoem函數(shù),只能使用一些更底層的操作來實現(xiàn)。 基于hive的注冊表自從windows ce 4.0之后,windows ce提供了基于hive的注冊表?;趆ive的注冊表把注冊表數(shù)據(jù)存放在文件系統(tǒng)的文件上,這種文件被稱作蜂箱hive

7、。這就意味著不再需要在系統(tǒng)斷電和啟動時進(jìn)行保存恢復(fù)注冊表操作。hive是注冊表中的一組鍵,子鍵和值。hive是文件系統(tǒng)上表現(xiàn)為單個文件。windows ce中有三種hive。類型 文件 描述boot hive rom中的boot.hv hkey_local_machine, hkey_classes_root, hkey_users中的所有數(shù)據(jù)。只在啟動時使用。system hive 由oem決定(通常是system.hv) hkey_local_machine, hkey_classes_root, hkey_users中的所有數(shù)據(jù)。包含設(shè)備范圍內(nèi)不隨著用戶改變而改變的數(shù)據(jù)。user hiv

8、e user.hv hkey_current_user下的所有數(shù)據(jù)。 包含用戶特有的設(shè)置,每個用戶都有一個單獨的user.hv?;趆ive的注冊表適用于對于有永久存儲并且需要經(jīng)常冷啟動的設(shè)備。我們也可以看到,基于hive的注冊表把系統(tǒng)數(shù)據(jù)和用戶數(shù)據(jù)分開存放,這就意味著基于hive的注冊表還提供多用戶支持。對于每一個用戶,可以提供不同的user.hv,當(dāng)用戶登錄時加載相應(yīng)的user.hv,從而達(dá)到多用戶目的。注冊表類型分為基于對象存儲的注冊表和基于hive的注冊表,在制定內(nèi)核的時候只能選擇其中一種。從理論上講這兩種注冊表都能夠?qū)崿F(xiàn)永久保存注冊表數(shù)據(jù),不過采用不同的類型會影響ce的啟動順序和啟動

9、速度,還會影響內(nèi)存的使用量。我還是趨向于采用基于hive的注冊表來實現(xiàn)永久保存注冊表數(shù)據(jù),這也是個發(fā)展趨勢。在講解之前先簡單描述如果ce采用基于hive的注冊表,那么在啟動時怎么加載已保存的注冊表數(shù)據(jù):1、nk.exe執(zhí)行,啟動filesys.exe。2、filesys.exe加載引導(dǎo)hive,此時引導(dǎo)hive位于nk.bin解壓之后的文件中。3、filesys.exe啟動device.exe,之后處于等待狀態(tài),等待device.exe將包含系統(tǒng)hive的文件系統(tǒng)和存儲設(shè)備的驅(qū)動程式加載完畢。而這個文件系統(tǒng)和存儲設(shè)備的驅(qū)動程式存在于引導(dǎo)hive中。4、device.exe加載上述所說的文件系統(tǒng)

10、驅(qū)動程式和存儲設(shè)備驅(qū)動程式,使之開始工作。之后device.exe處于等待狀態(tài)。5、filesys.exe被喚醒,加載并且安裝系統(tǒng)hive。之后filesys.exe處于等待狀態(tài)。6、nk.exe按照系統(tǒng)hive的信息開始執(zhí)行初始化工作。其中包括加載驅(qū)動程式和啟動一些應(yīng)用程式。其中加載驅(qū)動程式一般由device.exe執(zhí)行,而啟動應(yīng)用程式由filesys.exe執(zhí)行。這時device.exe和filesys.exe已被喚醒。因為引導(dǎo)hive和系統(tǒng)hive肯定有重復(fù)的地方,所以可能出現(xiàn)重復(fù)加載了驅(qū)動程式或重復(fù)啟動了應(yīng)用程式。為此,ce允許在描述驅(qū)動程式的注冊表信息中加入防止重復(fù)的標(biāo)志,而應(yīng)用程式

11、能采用事件對象來防止重復(fù)啟動,如device.exe。下面講述怎么設(shè)置基于hive的注冊表(如果保存系統(tǒng)hive的是fat文件系統(tǒng)):1、在pb中加入hive-based registry,如果是geode平臺,再加入bsp_enable_fsreghive環(huán)境變量。2、打開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是個布爾值,指示是否開始就執(zhí)行設(shè)備管理器device.exe,按照ce幫助文件的說法,只有想把系統(tǒng)hive存儲在對象存儲中才在此設(shè)置為0,所以一般都要設(shè)置為1。3、如果是多用戶,能在上述的注冊表位置下輸入defaultuser=,指定默認(rèn)的用戶名。如果是單用戶系統(tǒng),能不設(shè)置。4、確保將包含系統(tǒng)hive的文件系統(tǒng)驅(qū)動程式的注冊表信息和存儲設(shè)備的驅(qū)動程式的注冊表信息被包含在“;

13、 hive boot section”和“; end hive boot section”之間,在這兩個語句之間的注冊表數(shù)據(jù)全部屬于引導(dǎo)hive。如果我們將系統(tǒng)hive文件system.hv存放在硬盤上,并采用fat文件系統(tǒng)。那么就要將hkey_local_machinesystemstoragemanagerfatfs和hkey_local_machinesystemstoragemanagerprofileshdprofile移動到“; hive boot section”下。5、在“; hive boot section”和“; end hive boot section”之間的所有驅(qū)動

14、程式的注冊表信息中都加入下列一個標(biāo)志: flags=dword:1000這個標(biāo)志是個位掩碼,他能和其他已存在的flags或運算。值1000表示此驅(qū)動程式只加載一次,這樣device.exe就不會把當(dāng)前驅(qū)動程式加載兩次了。6、在包含系統(tǒng)hive的存儲設(shè)備的驅(qū)動程式的注冊表信息中,加入如下標(biāo)志(假設(shè)是硬盤):hkey_local_machinesystemstoragemanagerprofileshdprofilemountflags=dword:2這個標(biāo)志表示這個存儲設(shè)備包含系統(tǒng)hive文件。按照如上所述設(shè)置后的內(nèi)核就能實現(xiàn)永久存儲注冊表數(shù)據(jù)了。對于保存注冊表數(shù)據(jù)的執(zhí)行動作在此必須闡述清晰:正

15、常情況下,ce能夠確保重要的注冊表數(shù)據(jù)能夠從內(nèi)存刷到(flush)永久存儲器上。不過這并不能完全確保所有數(shù)據(jù)都能完整地保存而不丟失,所以要確保萬無一失,應(yīng)該主動地調(diào)用regflushkey函數(shù)強(qiáng)制將內(nèi)存中的數(shù)據(jù)刷到永久存儲器上。這個函數(shù)的參數(shù)只有一個,就是注冊表分支。ce還增加一個注冊表項(如下所示),他的作用是每當(dāng)函數(shù)regclosekey被調(diào)用時都自動調(diào)用regflushkey函數(shù)。hkey_local_machineinitbootvarsregistryflags=dword:1如果ce在啟動過程中發(fā)現(xiàn)系統(tǒng)hive出現(xiàn)錯誤,他會自動刪除文件并創(chuàng)建一個默認(rèn)的系統(tǒng)hive文件,如果出現(xiàn)下面

16、的注冊表項,說明發(fā)生了這種事情。windows ce下訪問物理內(nèi)存的方法嵌入式設(shè)備與桌面pc的一個顯著不同是它的應(yīng)用程序中通常需要直接訪問某一段物理內(nèi)存,這在驅(qū)動程序中對物理內(nèi)存的訪問尤為重要,尤其是像arm體系結(jié)構(gòu)下,i/o端口也被映射成某一個物理內(nèi)存地址。因此,與桌面版本windows相比,windows ce提供了相對簡單的物理內(nèi)存訪問方式。無論是驅(qū)動程序還是應(yīng)用程序都可以通過api訪問某一段物理內(nèi)存。windows ce的有些函數(shù)中需要用到物理內(nèi)存結(jié)構(gòu)體physical_address, windows ce在ceddk.h中定義了physical_address,它其實是large_

17、integer類型,其定義如下:/ in ceddk.htypedef large_integer physical_address, *pphysical_address;/ in winnt.htypedef union _large_integerstruct dword lowpart; long highpart;longlong quadpart; large_integer;可見,windows ce中用64個bit來代表物理地址,對于大多數(shù)32位的cpu而言,只需要把它的highpart設(shè)置為0就可以了。如果要直接訪問某一個地址的物理內(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)存綁定,這樣,最終對物理內(nèi)存的訪問還是通過虛擬地址進(jìn)行。它們的聲明如下:/ 申請?zhí)摂M內(nèi)存lpvoid virtualalloc(lpvoid lpaddress, / 希望的虛擬內(nèi)存起始地址dword dwsize, / 以字節(jié)為單位的大小dword flallocationtype, / 申請類型,分為reserve和commitdword flprotect / 訪問權(quán)限);/ 把物理內(nèi)存綁定到虛擬地址空間bool virtual

19、copy( lpvoid lpvdest, / 虛擬內(nèi)存的目標(biāo)地址lpvoid lpvsrc, / 物理內(nèi)存地址dword cbsize, / 要綁定的大小dword fdwprotect / 訪問權(quán)限);virtualalloc對虛擬內(nèi)存的申請分為兩步,保留mem_reserve和提交mem_commit。其中mem_reserve只是在進(jìn)程的虛擬地址空間內(nèi)保留一段,并不分配實際的物理內(nèi)存,因此保留的虛擬內(nèi)存并不能被應(yīng)用程序直接使用。mem_commit階段才真正的為虛擬內(nèi)存分配物理內(nèi)存。下面的代碼顯示了如何使用virtualalloc和virtualcopy來訪問物理內(nèi)存。因為virtua

20、lcopy負(fù)責(zé)把一段物理內(nèi)存和虛擬內(nèi)存綁定,所以virtualalloc的時候只需要對內(nè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用來把一段物理內(nèi)存直接映射到虛擬內(nèi)存。此函數(shù)的原形如下:pvoid mmmapiospace( physical_address physicaladdress,

22、/ 起始物理地址ulong numberofbytes, / 要映射的字節(jié)數(shù)boolean cacheenable / 是否緩存);其實,mmmapiospace函數(shù)內(nèi)部也是調(diào)用virtualalloc和virtualcopy函數(shù)來實現(xiàn)物理地址到虛擬地址的映射的。mmmapiospace函數(shù)的原代碼是公開的,我們可以從%_winceroot%publiccommonoakdriversceddkddk_mapddk_map.c得到。從mmmapiospace的實現(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ù),用來申請和釋放一段連續(xù)的物理內(nèi)存。函數(shù)可以保證申請的物理內(nèi)存是連續(xù)的,如果函數(shù)成功,會返回虛擬內(nèi)存的句柄和物理內(nèi)存的起始地址。這對于dma設(shè)備尤為有用。在這里就不詳細(xì)介紹了,讀者可以參考windows ce的聯(lián)機(jī)文檔wince6.0注冊表windows ce 6.0有4個基本的注冊表鍵值

26、, hkey_classes_root, hkey_current_user, hkey_local_machine, hkey_users。其它的都是這4個注冊表的子鍵。我 們以一個內(nèi)建的串口驅(qū)動為例,它在注冊表文件platform.reg中的描述如下: 其中prefix 和 dll項是必不可少的,prefix代表設(shè)備文件名前綴, 與index合用表示該設(shè)備的名稱,該注冊表子鍵的設(shè)備名稱就是com1:,該名稱可以用于createfile調(diào)用。dll則是動態(tài)鏈接庫名稱。 index為設(shè)備序號。flags為1表示系統(tǒng)啟動時不加載,需要應(yīng)用程序自己加載,為0表示該驅(qū)動在系統(tǒng)啟動時加載。 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中,定義了一個類cregistryedit來封裝了注冊表的操作。許多的硬件驅(qū)動,比如串口類,也繼承了cregistryedit類。還有一種方法是利用windows ce提供的api進(jìn)行注冊表項的操作。方法一: 利用系統(tǒng)提供的注冊表類cregistryedit 類的定義在文件regedit.h中

28、。 在 構(gòu)建函數(shù)中,會取得當(dāng)前注冊表子鍵的handle句柄。有3個構(gòu)造函數(shù),第一個是用全路徑,調(diào)用hkey = opendevicekey(text(hkey_local_machinedriversbuiltinserial)構(gòu)造, 第二個是如果已知其父注冊表子鍵,調(diào)用regopenkeyex( hkey_local_machine, text(driversbuiltinserial), 0,0,&hkey). 第三種方法是用regcreatekeyex(). 析構(gòu)函數(shù)中,調(diào)用regclosekey(hkey)關(guān)閉掉對注冊表子鍵的引用。 讀取注冊表項可以使用getregvalue方法,寫入

29、注冊表項使用regsetvalueex方法。其方法的實現(xiàn)也是通過windows ce api,具體可以參照下一個section。 reggetlist和regsetlist方法提供了對類型為reg_multi_sz和dword的value的讀寫操作。 其它類方法getwindowinfo, getisrinfo,getpciinfo獲取注冊表更多的信息。方法二: 利用windows ce api 為 了獲取一個注冊表鍵值,先要調(diào)用regopenkeyex。以上面內(nèi)建串口驅(qū)動為例,regopenkey( hkey_local_machine, text(driversbuiltinserial)

30、, 0, 0, &hkey ), 其中hkey就是我們獲取的該注冊表子鍵的handle句柄。接下來對注冊表子鍵的操作就是通過hkey來實現(xiàn). 有了hkey, 就可以對注冊表子鍵的各個內(nèi)容進(jìn)行讀寫操作。如果要讀去子鍵的prefix, 調(diào)用函數(shù)regqueryvalueex(hkey, text(prefix), null, &lptype, &lpdata, &lpcbdata), lptype, lpdata為prefix返回類型和值,該例中,lptype = reg_sz, lpdata = text(com). lpcbdata當(dāng)調(diào)用時,修飾限制lpdata的size in bytes,返

31、回時,為lpdata返回值的size。 對應(yīng)于讀操作,寫操作是一個相反的過程,regsetvalueex(hkey, text(prefix), null, reg_sz, pbyte(text(tst), wcslen(text(tst)*2). 其中要寫入的項為prefix項,類型為reg_sz, 值為text(tst), 最后一個參數(shù)為寫入值得size in bytes. 注意第二個參數(shù),如果注冊表中存在該項,則改寫它的值。如果沒有,則新建一個注冊表項。 某些情況下,我們需要刪除一個注冊表項,只需調(diào)用regdeletekey(hkey, text(index)就可以刪除index注冊表項

32、。 要關(guān)閉一個注冊表子鍵,只需要調(diào)用regclosekey(hkey)就可以完成??偨Y(jié): 關(guān)于注冊表有很多更加深入的使用,如regenumvalue. 更多有關(guān)注冊表項,可以查看msdn手冊。注冊表分兩種一種叫rom ,一種hive如果注冊表是固定的(每一臺設(shè)備是一樣的),可以在platform.reg,project.reg還有common.reg中先設(shè)置好,然后再重新build 如果需要保存一些個性化的信息,在h/w reset后還需要恢復(fù)這些信息,而且每一臺設(shè)備中注冊表是不一樣的,那就用mikemao(mikemao) 所說的方法,不過不是系統(tǒng)啟動后再寫一遍,而是在啟動的過程中就設(shè)定注冊

33、表。一般的產(chǎn)品很少用這種方法的,因為要保證h/w reset后回到出廠狀態(tài),不過我們公司的產(chǎn)品中就用了第二種方法,這種方法實現(xiàn)要復(fù)雜一點,有興趣的話再探討。問題解決:1 要把platform中得注冊表設(shè)置為hive 2 再代碼中保存的時候使用fulshkey()wince注冊表簡介在wince中支持兩種類型的注冊表:ram-based和hive-based,默認(rèn)情況下使用的是ram-based注冊表。 1.ram-based注冊表 ram-based的注冊表是將所有的注冊表數(shù)據(jù)存儲在對象存儲(object store)中,也就是存放在ram里面。一般用在有電池備份ram的系統(tǒng)上面,也就是說,當(dāng)

34、系統(tǒng)掉電以后,會自動切換成電池供電,此時ram還有供電,所以上面的數(shù)據(jù)不會丟失,這樣采用ram-based注冊表非常有效。ram-based注冊表多用于經(jīng)常熱啟動(warm boot)的設(shè)備上面,很少用在冷啟動(cold boot)設(shè)備上面。2.hive-based注冊表 hive-based的注冊表是將注冊表數(shù)據(jù)存成文件,也就是存在掉電不會丟失數(shù)據(jù)的磁盤上面,hive注冊表被分成兩部分:系統(tǒng)hive和用戶hive,也就是system.hv和user.hv。在一個多用戶系統(tǒng)中,會包含多個用戶hive,不同的用戶hive(user.hv)會在該用戶登陸的時候被加載,被注銷的時候卸載。實際上hiv

35、e-based的注冊表包含三個部分,我稱之為引導(dǎo)hive,系統(tǒng)hive和用戶hive,也就是boot.hv,system.hv和user.hv。boot.hv主要用于系統(tǒng)引導(dǎo)時候所需的注冊表設(shè)置,這部分設(shè)置不會被保存在磁盤上面,也就是說,在系統(tǒng)掉電以后就會丟失。實際上,這部分應(yīng)該說是屬于ram-based注冊表,由于這部分?jǐn)?shù)據(jù)不需要改動,所以也就無所謂了。system.hv存放關(guān)于系統(tǒng)的注冊表設(shè)置,user.hv存放和用戶相關(guān)的注冊表設(shè)置。一般在我們編譯wince系統(tǒng)的時候,platform builder會根據(jù)platform.reg文件中的注釋標(biāo)簽來判斷哪些注冊表設(shè)置放入boot.hv中,

36、凡是在注釋標(biāo)簽”;hive boot secton”和”;end hive boot section”之間的設(shè)置都會被放入boot.hv中,其他的都會放到default.hv和user.hv中。在wince第一次引導(dǎo)的時候,所有的.hv都會被放到ram中,wince系統(tǒng)會首先讀取boot.hv進(jìn)行相關(guān)引導(dǎo)時候的設(shè)置,然后把default.hv和user.hv放到磁盤的指定路徑下面,這個路徑也是在注冊表中設(shè)置的,然后default.hv會被重命名為system.hv。當(dāng)系統(tǒng)第二次啟動的時候,會比較磁盤上的.hv和內(nèi)存中的.hv是否一致,如果不一致,會拷貝磁盤上面的.hv到內(nèi)存中。我們可以看出,實

37、際上hive注冊表在運行的時候也是放在ram中的,這樣速度比較快。啟動的時候會從磁盤上讀出,在用戶更改注冊表以后,會被保存在磁盤上,保存的時機(jī)也是可以設(shè)置的,可以選擇在用戶更改后立刻保存到磁盤上,也可以選擇在reboot的時候保存。wince注冊表應(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存在這兩個鍵值的文件有:$(_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、的顯示選項中是無法更改一些窗口的顏色的.不過,我們倒是可以通過更改$(_winceroot)publiccommonoakfilescommon.reg文件中的xp顏色參數(shù)來達(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空間)移動到某個外部儲存器harddisk中,可以按如下步驟:1.將$(_winceroot)publiccommonoakfilesintltrns0804common.str文件中的loc

48、_path_desktop宏定義改為harddiskwindows桌面2.然后將所有.dat文件中關(guān)于loc_desktop_dir的選項,全部在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 注冊表文件 platform.reg 詳解一、hive 注冊表功能 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 說明: systemhiv 系統(tǒng)hive文件的保存路徑與文件名 profiledir 用戶配置文件保存路徑 defaultuser 默認(rèn)加載的用戶hive文件 start devmgr 啟動時加載設(shè)備管理器 flags 這個值替代start devmgr,可以在包括start devmgr的功能前提下提供更精確的控制 flag bit setting description 0x00000001 starts storage manager in phase one of startup for hive-based registry (為了實現(xiàn)hive,啟動時加載存儲管理器)

51、0x00000002 starts device manager in phase one of startup for hive-based registry (為了實現(xiàn)hive,啟動時加載設(shè)備管理器) 0x00000004 starts storage manager in phase one of startup for registry in external rom, such as binfs (為了注冊擴(kuò)展rom例如binfs,在啟動時加載存儲管理器) 0x00000008 starts device manager in phase one of startup for registry in external rom, such as binfs (為了注冊擴(kuò)展rom例如binfs,在啟動時加載設(shè)備管理器) registryflags 在調(diào)用regclosekey函數(shù)時自動調(diào)用regflushkey函數(shù),用于自動保存注冊表 設(shè)備管理器會加載 hkey_local_machinedriversbuiltin 下的所有設(shè)備驅(qū)動 二、存儲管理 hkey_local_machinesystemstoragemanagerprofiles automount=dword:1 a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論