什么意味着WDK驱动程序中的PHYSICAL_ADDRESS值?

时间:2012-05-15 23:22:02

标签: memory memory-address drivers wdk

我对了解WDK中的PHYSICAL_ADDRESS结构有点疑问。我认为它是物理内存中的真实物理地址。现在我已经尝试过了 - 我的虚拟PC有512 MB RAM和驱动程序中的代码

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值?

PS:请不要问为什么我这样做。我只是想知道这怎么可能。

1 个答案:

答案 0 :(得分:0)

代码正常工作意味着您已成功将该(可能是虚假的)物理地址映射到您的代码可以读写的虚拟地址。这只是页面表中的一个条目。显然系统不验证物理地址范围。尝试derefencing获取的虚拟地址:     DbgPrint(“%x \ n”,*((PULONG)mr));

相关问题