wince5.0下實體地址訪問
1.靜態對映
透過OAL中來定義。定義了從4GB的實體地址空間到核心512MB未對映的虛擬地址空間的對映關係。核心將會從這個表中建立兩個虛擬地址空間段。一個是有緩衝的,一個是沒有緩衝的。只能在核心模式下訪問。
作為OEMAddressTable的補充,還可以呼叫CreateStaticMapping來完成實體地址到虛擬地址的對映。函式返回一個未緩衝區域的虛擬地址,當然也只能由核心訪問(an uncached memory region)。一個靜態對映只能在啟動時間(at boot time)建立而不是能夠動態建立的。一個靜態對映被建立後會一直有效直到裝置重啟。
2. 2.動態對映
主要是透過VirtualAlloc和VirtualCopy兩個函式來實現。首先VirtualAlloc保留好一段虛擬地址,在保留時應該指定MEM_RESERVE和PAGE_NOACCESS標誌而且保留的區域大小至少為2M,因為這樣被就會分配到本程式地址空間外的地址,否則就會分配在本程式的地址空間內,會受到32M空間大小的限制。由VirualCopy來完成實體地址的對映。可以對映一段實際的RAM區域或外圍裝置的暫存器地址(這樣就可以操作外圍裝置了)。
使用VirualCopy的注意事項有虛擬地址的page offset和實體地址的page offset必須相同,因為一個虛擬地址頁只能夠被對映到一個實體地址頁,否則就會呼叫失敗。在對映一段實體地址區域時,應該指定PAGE_PHYSICAL和PAGE_NOCACHE, 而且保證傳入的實體地址左移8位。
在wince5.0中,裝置驅動程式可以直接使用MmMapIoSpace完成實體地址到虛擬地址的對映。HalTranslateBusAddress是把某個型別的某個物理匯流排的地址轉化為實體地址(全域性的)。然後就可以使用MmMapIoSpace將實體地址對映為某個虛擬地址。TransBusAddrToVirtual直接會把一個與匯流排相關地址直接對映為可訪問的虛擬地址。
由於驅動程式和應用程式都是執行在使用者空間下。所以驅動程式有的許可權,應用程式也會有。在驅動和應用中,透過上述的動態對映方法,來訪問實體地址或控制裝置暫存器都會容易做到。Wince5.0還有核心模式與使用者模式的切換的介面(6.0下已經不被支援),應用程式可以透過這個介面切換到核心模式下,可以透過靜態對映的有效虛擬地址經過MMU直接改變某個RAM的儲存內容,無需在對映,沒有地址訪問限制是核心模式下的特點。
顯而易見在wince5.0訪問實體地址和外圍裝置具有很大的自由,應用程式的許可權很大,很容易就會破壞整個系統。在接下來的wince6.0 核心有了很大的變化,虛擬記憶體模型與5.0大有不同,應用程式不能在使用者模式下直接完成實體地址的對映了(virtualcopy對映實體地址將會是個不支援的請求),只能透過核心驅動程式來完成實體地址的對映,下篇將會介紹wince6.0下訪問實體地址。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23410886/viewspace-1031504/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- wince6.0下使用者程式訪問實體地址
- Windows 95/98下直接訪問實體記憶體 (轉)Windows記憶體
- PostgreSQL IP地址訪問配置SQL
- 內網IP地址實現HTTPS加密訪問教程內網HTTP加密
- Linux下邏輯地址、線性地址、實體地址詳細總結Linux
- 實體地址、虛擬地址
- 模擬ip訪問(附模擬手機訪問)遠端地址
- 如何遮蔽某IP地址訪問網站網站
- 【Eclipse】--修改專案訪問地址頭Eclipse
- .net core下訪問控制層的實現
- 獲取訪問者真實ip地址?我覺得不可能
- Nginx 實戰-04-nginx 不同的地址訪問不同的服務Nginx
- 資料庫VIP地址無法訪問(二)資料庫
- 資料庫VIP地址無法訪問(一)資料庫
- xp系統下怎樣更改網路卡實體地址
- wince6.0下的實體地址對映和共享
- 多個人訪問實體Bean,這個Bean訪問幾次資料庫啊?Bean資料庫
- Tomcat下Servlet的地址問題TomcatServlet
- windows伺服器下指定IP地址遠端訪問伺服器的設定方法Windows伺服器
- 實體“微地址”的遐想
- 【ARM-WINCE】WinCE5.0/6.0下,通過command line實現自動化編譯編譯
- Java web 專案,在網頁url地址訪問名JavaWeb網頁
- vue執行後network的IP地址訪問不了Vue
- 使用SQLNET.ora檔案限制Ip地址訪問SQL
- 有道翻譯軟體下載地址
- 如何實現多層目錄下訪問控制器
- Linux禁止某個IP地址訪問的幾種方法Linux
- django的設定 訪問伺服器端地址設定Django伺服器
- 通過SQLNET.ora檔案限制Ip地址訪問SQL
- 透過SQLNET.ora檔案限制Ip地址訪問SQL
- PbootCMS後臺訪問地址及預設帳號密碼boot密碼
- Linux 下匿名訪問windows 下的ftpLinuxWindowsFTP
- 你看到的所有地址都不是真的 | 虛擬地址與實體地址
- 億萬級訪問量下的前端同構直出實踐前端
- 怎麼樣在JBUILDERX中實現會話BEAN訪問實體BEAN??UI會話Bean
- 在Redhat下訪問NTFS磁碟(轉)Redhat
- 問下append後地址不一樣了APP
- 用訪問控制列表實現網路單向訪問(轉)