在我的C++程序中(在Windows上),我正在分配一块内存,并确保它在物理内存中保持锁定(未连接和连续)(即使用VirtualAllocEx(),MapUserPhysicalPages()等).
在我的过程中,我可以获得该块的VIRTUAL内存地址, 但我需要找出它的PHYSICAL内存地址,以便将其传递给某个外部设备.
1.在USER模式下,有什么方法可以将虚拟地址转换为程序中的物理地址吗?
2.如果没有,我只能在KERNEL模式下找到这个虚拟到物理映射.我想这意味着我必须写一个驱动程序才能做到这一点......?你知道我可以使用的任何现成的驱动程序/ DLL/API,我的应用程序(程序)将与之交互以进行翻译吗?
3.如果我必须自己编写驱动程序,我该如何进行翻译?我使用哪些功能?是mmGetPhysicalAddress()吗?我该如何使用它?
4.此外,如果我理解正确,mmGetPhysicalAddress()将返回调用进程上下文中的虚拟基址的物理地址.但是如果调用进程是驱动程序,并且我正在使用我的应用程序来调用该函数的驱动程序,那么我正在改变上下文,当调用mmGetPhysicalAddress例程时,我不再处于应用程序的上下文中...所以如何翻译应用程序(用户模式)内存空间中的虚拟地址,而不是驱动程序?
任何答案,提示和代码摘录将不胜感激!
谢谢