我正在 Windows 10(64 位)中编写一个内核模式驱动程序,其主要目的是从 DMA 读取,我想知道是否不是将内存块从内核空间复制到用户空间中分配的缓冲区,我可以以某种方式向用户空间公开一个地址(当然不是物理地址),并节省内存复制操作。
也许是这样的:
分配一块连续的物理内存(并将物理地址映射到内核空间中的虚拟地址)。
将内核空间中的虚拟地址映射到用户空间中的虚拟地址。
顺便说一句,由于只有一个内核空间,并且用户空间与系统中运行的进程一样多(这是正确的吗?),我必须对调用进程使用某种句柄,以便获得适当进程中的虚拟地址...
谢谢你的时间!
对于你的(2),怎么样MmMapLockedPagesSpecifyCache() https://msdn.microsoft.com/en-us/library/windows/hardware/ff554629(v=vs.85).aspx其中 AccessMode = UserMode。请注意重要的警告,“例程返回一个在驱动程序运行的进程上下文中有效的用户地址”,因此当您执行以下操作时,您需要确保驱动程序正在用户模式应用程序的进程中运行映射,即通过在直接处理来自用户模式代码的调用的驱动程序代码中进行映射,例如DeviceIoControl()。另请注意,要使用此功能,您需要提供描述物理页的 MDL,并且这些页必须被锁定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)