我对了解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:请不要问为什么我这样做。我只是想知道这怎么可能。答案 0 :(得分:0)
代码正常工作意味着您已成功将该(可能是虚假的)物理地址映射到您的代码可以读写的虚拟地址。这只是页面表中的一个条目。显然系统不验证物理地址范围。尝试derefencing获取的虚拟地址: DbgPrint(“%x \ n”,*((PULONG)mr));