• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            milkyway的窩

            最初想法的誕生地

             

            VirtualCopy in WinCE6.0

            http://blog.csdn.net/fredzeng/archive/2007/04/04/1551898.aspx

            在CE4.2/5.0里面滾打多年的兄弟應該經常用這個函數吧。這個函數方便驅動和應用程序范圍任何的物理地址,包括物理內存啊,設備控制器的寄存器啊,甚至GPIO也可以在AP里面隨便拉上拉下。

            這個函數雖然方便,但是并不安全,你想你好不容易把一個功能完善的image給build出來了,結果碰到了一個寫AP的“高手”,把你的寄存器和共享內存中的數據修改得一塌糊涂,最后報出bug來說你驅動的你會不會暈倒!

            還好從CE6.0開始我們可以安枕無憂了,因為AP再也不能調用VirtualCopy函數來直接訪問物理地址了,但因此帶來了一些應用上的不便。

            VirtualCopy的限制來源于CE6.0之后kernel的巨大變革,在CE5.0之前的Windows CE操作系統中,kenrel就僅僅是kern.exe(nk.exe),這個exe其實是OAL、KITL和Kernel三個的合體,nk.exe是運行于內核模式(kernel mode),也就具有了訪問特殊地址的權限,然后除此之外的代碼默認都是運行于用戶模式(user mode),所以它們的驅動和AP都是等級的,都在用戶模式運行,要運行在kernel模式也可以,調用一個API SetKmode()就行了。因為驅動是肯定要訪問物理地址的,所以CE5.0以前的OS都是運行用戶模式的程式訪問物理地址的,然后又為了方便做從物理地址到虛擬地址的映射,就提供了一系列的幫助函數,virtualcopy就是最常用的函數之一。

            CE6.0開始,kernel模式變得比較正規,類似于臺式機上的windows系統了,驅動和ap的權限是嚴格區分的,大部分的驅動程序運行在kernel模式,它們可以用virtualcopy讀寫物理地址對應的物理設備,但用戶模式的AP將從此沒有直接訪問物理地址的權限,virtualcopy每次調用都會失敗返回。

            在這里還要注意的是,其實并不是用戶模式就不能使用virtualcopy,virtualcopy只是不能在用戶模式的AP中使用,但是卻還可以在用戶模式的驅動使用,但是在用戶模式的驅動中使用也有條件,那就是必須在對應的注冊表中設置可以訪問的內存地址的范圍才行。

            在某些場合,一些特殊功能的AP確實需要訪問物理地址的,比如設置保存物理內存指定位置的全局變量,開發讀寫GPIO的測試工具等等。在這種情況下一種簡單的方法是實現一個最簡單的跑在kernel模式的流驅動,提供一個deviceiocontrol的接口來幫助AP申請對應于物理內存地址的虛擬內存地址。

            除了virtualcopy之外,CE6下還有很多API是AP和user模式的驅動不能調用的,給大家參考一下,大家要把CE50下的AP移植到6.0下一定要注意找到替代

            Virtual Memory APIs
            CeVirtualSharedAlloc
            LockPages
            LockPagesEx
            UnlockPages
            UnlockPagesEx
            VirtualAllocCopyEx
            VirtualCopyEx
            VirtualSetAttributes
            CreateStaticMapping
            NKDeleteStaticMapping
            VirtualCopy

            File System APIs
            ReadRegistryFromOEM
            SetStoreQueueBase
            WriteRegistryToOEM

            Power APIs
            PowerOffSystem (很多測試AP用到)

            Miscellaneous APIs
            SetOOMEvent

            posted on 2007-04-18 10:56 milkyway 閱讀(2278) 評論(1)  編輯 收藏 引用 所屬分類: wince(別人的文章技巧總結)

            評論

            # re: VirtualCopy in WinCE6.0 2008-04-16 14:22 amy

            你好,我最近在做WINCE,我用VS2005編譯后在ARM上無法運行,什么原因?
            我的MSN:amywang1840@hotmail.com  回復  更多評論   

            導航

            統計

            公告

            隨筆皆原創,文章乃轉載. 歡迎留言!

            常用鏈接

            留言簿(37)

            隨筆分類(104)

            隨筆檔案(101)

            文章分類(51)

            文章檔案(53)

            wince牛人

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲精品久久久www| 久久精品人人做人人爽97 | 国产精品成人无码久久久久久 | 亚洲国产美女精品久久久久∴| 久久久无码精品亚洲日韩蜜臀浪潮| 久久电影网一区| 久久亚洲色一区二区三区| 亚洲熟妇无码另类久久久| 中文字幕一区二区三区久久网站| 2021国内精品久久久久久影院| 国内精品九九久久久精品| 久久香蕉国产线看观看猫咪?v| 久久久久无码精品国产不卡| 久久综合狠狠综合久久97色| 久久99国产精品久久久| 99精品国产99久久久久久97| 久久久久国产精品三级网| 国产一久久香蕉国产线看观看| 精品综合久久久久久97| 久久93精品国产91久久综合| 97久久综合精品久久久综合| 中文国产成人精品久久不卡| 青青青青久久精品国产h久久精品五福影院1421 | 99久久国产宗和精品1上映 | 久久国产色AV免费看| 蜜桃麻豆WWW久久囤产精品| 爱做久久久久久| 国产亚州精品女人久久久久久| 久久国产精品一国产精品金尊| 久久亚洲AV无码精品色午夜| 日本加勒比久久精品| 午夜精品久久久久9999高清| 久久强奷乱码老熟女网站| 久久精品无码一区二区三区日韩 | 一本色综合久久| 亚洲国产成人乱码精品女人久久久不卡 | 久久亚洲国产最新网站| 久久夜色精品国产亚洲| 久久精品人妻中文系列| 久久无码专区国产精品发布| 99精品国产免费久久久久久下载|