Block在Windows上访问物理地址
问题描述:
我正通过PC上的设备特定物理内存访问我的内存映射设备。 这是通过使用驱动程序完成的,该驱动程序将特定的物理地址映射到我的进程地址空间上的线性内存中的指针。Block在Windows上访问物理地址
我想知道是否有任何方法可以获得块的特定物理地址并阻止其他进程或设备访问此物理地址?
使用第三方驱动程序完成物理地址到线性映射的映射:TVicHW32。
编辑:我可以重现场景,如果我用不同的标志运行我的应用程序的2个实例。两个实例都可以访问不属于任何进程内存空间的相同特定物理内存。
答
Youd驱动程序必须通过公开一个服务(DeviceIoContro)来完成这项工作,该服务检查一个范围是否已经映射,如果它是空闲映射的,并记录预留。另外一项服务可以释放保留区并取消映射。当然,你应该关闭与特定句柄相关的所有区域。不幸的是,在映射/解映射服务中存在轻微的不对称,因为“映射”服务是通过DeviceIoControl完成的,因此它在CreateFile时间获取了句柄,但映射区域不再直接连接到设备句柄。当然,您可以安排驱动程序的“关闭”方法来自动解除映射(ZwUnmapViewOfSection ...)。
我的问题是,我不控制谁访问物理地址。我只控制我的进程,但显然其他进程或设备驱动程序访问相同的物理地址。 – Eldad 2010-03-11 14:45:04
哦,对不起。我没有注意到你无法修改驱动程序。所以事情要困难得多。一个(小)希望是通过限制对驱动程序公开的公共对象(即在CreateFile中使用的名称来写入设备的名称)的访问,来阻止其他用户的进程访问由驱动程序控制的设备。 – 2010-03-11 15:56:54
但这是一个非常有限的解决方案,根本不是一般的。无论如何,它不能阻止其他设备驱动程序错误地改变你的设备状态:错误的内核驱动程序可以做任何不好的事情:( 很多年前,我在开发ISA卡时遇到了类似的问题:有人写在我的设备上,我不得不将芯片选择信号连接到CPU的NMI线,所以当访问卡的内存时,我可以用我的低级别调试程序拦截NMI事件......并不容易。 – 2010-03-11 15:57:16