【发布时间】:2014-05-15 16:19:46
【问题描述】:
我希望能够插入一个物理地址,并读取存储在该地址的数据。
在 Linux 下,我会使用 /dev/mem 来获取这些数据。在 Windows 8 下,我不确定有什么机制可以做到这一点。
我的用例是检查 PCI Express 设备。 PCI Express 设备在已知地址创建一个环形缓冲区,我可以从 PCIe BAR 确定该地址。一旦设置了这个地址,在计算机重新启动之前它不会改变。
目前,我可以使用RW Everything 之类的应用程序来查看那里的数据,但我希望能够在没有用户交互(没有 GUI)的情况下执行此操作,这样我在循环缓冲区包装之前遇到的问题更少可以访问数据。
有谁知道我是否可以从用户空间进行特权 Windows 系统调用(例如,映射一个区域)或者我是否需要使用自定义内核模块来执行此操作?我想有一些方法可以在没有自定义内核模块的情况下做到这一点,因为我不相信我在安装 RW Everything 时安装了一个。
【问题讨论】:
-
@AndrewMedico:除了一件事。该用户的实际目标是读取进程的内存。所以他必须处理虚拟内存和所有相关的事情。我不需要那个。我要访问的内存被锁定了。
-
您需要一个内核驱动程序(以及安装它的管理员权限),例如 WinIO,可在此处找到:internals.com(附源代码)。如果您只需要读取 SMBIOS 数据(在您的 PCI 情况下),它在此处的注册表中映射:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mssmbios\Data 可能就足够了,或者您也可以使用 WMI 或 Windows API: msdn.microsoft.com/en-us/library/windows/desktop/…
标签: windows