2012-05-15 61 views
0

我在理解WDK中的PHYSICAL_ADDRESS結構時遇到了一些問題。我認爲這是物理內存中的真實物理地址。現在我已經嘗試過了 - 我已經有512 MB內存的虛擬PC和我的驅動程序中的代碼什麼是realy意味着WDK驅動程序中的PHYSICAL_ADDRESS值?

PHYSICAL_ADDRESS pa; 
pa.QuadPart = 9223372036854775805; //max LONGLONG - 1 
mr = MmMapIoSpace(pa , 100, 0); 
DbgPrint("%i ", MmGetPhysicalAddress(mr)); 

...並且它沒有問題。 512 MB RAM可能如何?不是最大物理地址512 MB = cca 512 000 000?真正的意思是PHYSICAL_ADDRESS值?注:請不要問我爲什麼要這麼做。我只是想知道這怎麼可能。

回答

0

工作沒有問題的代碼意味着您已成功將該(可能是虛構的)物理地址映射到您的代碼可以讀取和寫入的虛擬地址。這只是頁表中的一個條目。顯然,系統不驗證物理地址範圍。嘗試取消拒絕獲得的虛擬地址: DbgPrint(「%x \ n」,*((PULONG)mr));