如何修改Windows CE的平臺類型(下)
如果使用SPI_GETOEMINFO參數(shù),我們可以獲得OEM信息,如果返回字符串中包括“Microsoft DeviceEmulator”,則表示當(dāng)前應(yīng)用程序運(yùn)行在模擬器中。
CheckPlatform 程序編譯好后,會(huì)自動(dòng)加入到NK.bin 中。我們可以通過Command Shell,運(yùn)行應(yīng)用程序。調(diào)用Attach Device啟動(dòng)Windows CE操作系統(tǒng)后,選擇Target菜單中的Target Control(快捷鍵Alt+1),輸入”s chekplatform”,就可以運(yùn)行CheckPlatform程序。
好了,***看一下運(yùn)行結(jié)果:
修改操作系統(tǒng)的類型
上面的話題其實(shí)很多文章都討論過了。但是在實(shí)際工作中,我們會(huì)遇到一些平臺遷移的工作。我們會(huì)首先將 Windows Mobile的軟件在Windows CE上運(yùn)行,以驗(yàn)證功能。不過有些軟件檢測了操作系統(tǒng)類型,在不修改軟件代碼的情況下,我們是否可以在Windows CE上運(yùn)行檢測平臺類型的應(yīng)用程序呢?
Windows CE操作系統(tǒng)的Platform Type類型值是在BSP中被指定的,我們可以通過修改BSP中的Platform Type來改變系統(tǒng)的Platform Type。注意:這種情況只能出現(xiàn)在測試時(shí),不應(yīng)該修改實(shí)際產(chǎn)品的平臺類型,否則會(huì)引起很多安全性的問題。
我們打開Windows CE 6.0 R2的源代碼,位置在:
x:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\INC
我們修改的是DEVICEEMULATOR的代碼,如果是其他平臺的代碼,則去相應(yīng)BSP文件夾中的指定位置。在BSP的INC文件夾中,我們會(huì)找到一個(gè)ioctl_cfg.h文件。
在ioctl_cfg.h文件中,我們會(huì)找到下面的代碼:
- #if defined( project_smartfon )
- #define IOCTL_PLATFORM_TYPE (L"SmartPhone\0")
- #elif defined( project_wpc )
- #define IOCTL_PLATFORM_TYPE (L"PocketPC\0SSDK\0")
- #else
- #define IOCTL_PLATFORM_TYPE (L"DeviceEmulator")
- #endif
- #define IOCTL_PLATFORM_OEM (L"Microsoft DeviceEmulator")
Device Emulator的BSP通過編譯選項(xiàng)區(qū)分了不同的平臺類型,如果是Windows CE系統(tǒng),則Platform Type為DeviceEmulator。好了,我們可以通過修改IOCTL_PLATFORM_TYPE的值,來“欺騙”操作系統(tǒng),讓應(yīng)用程序認(rèn)為自己運(yùn)行在Pocket PC或Smartphone上。注意:因?yàn)閃indows Mobile和Windows CE的函數(shù)庫存在巨大差異,Windows Mobile的應(yīng)用程序在Windows CE上未必能夠直接運(yùn)行。
修改IOCTL_PLATFORM_TYPE之后,我們需要重新編譯BSP,才能夠完成Platform Type的修改。在Build菜單中選擇Advanced Build Commands中的Rebuild Current BSP and Subprojects。
我們可以編譯BSP和Subporject后,調(diào)用BuildRel和Makeimg生成新的NK.bin。這樣,我們就可以節(jié)省大量的重新編譯的時(shí)間。在我的機(jī)器上大概幾分鐘就完成了BSP的編譯,如果是重新Build操作系統(tǒng)的話,需要二十分鐘左右。
NK編譯成功后,選擇Attach Device,重新運(yùn)行系統(tǒng)和CheckPlatform程序,會(huì)得到下面的運(yùn)行結(jié)果:
***還需要提示一下,這種方法只對通過SystemParametersInfo API檢測Platform Type的應(yīng)用程序有效。如果軟件使用了其他方法檢測Platform Type的話,那就需要具體問題具體分析了。
更多關(guān)于Windows Embedded CE開發(fā)的文章,請參考“Windows Embedded CE 中國研發(fā)團(tuán)隊(duì)”的中文博客:http://blogs.msdn.com/wincechina/
【編輯推薦】