在我提出问题之前,我将回顾一下我目前正在使用的内容,以便您对我已经做过/尝试过的事情有一个不错的了解。
我有一个多线程用户模式 Windows 桌面应用程序,它向 KMDF 驱动程序(纯软件,没有硬件)发出 DeviceIOControl 调用。有 5 个单独的线程不断地对驱动程序进行相同的自定义 IOCTL 调用。该请求包括:
- PsLookupProcessByProcessId 获取要从中读取内存的进程。
- MmCopyVirtualMemory 将请求的内存复制到提供的缓冲区中。
- ObDereferenceObject 减少引用计数。
驱动程序目前正在串行执行此操作,而我的用户模式应用程序的主要瓶颈是等待内存读取完成,并且在场景可以“渲染”之前一切都需要完成。
我已经尽可能地减少了 DeviceIOControl 请求的数量,所以现在我一直在研究重叠的 IO 并允许每个线程异步发送请求。我的问题是这是否值得尝试,因为我不知道是否可以在驱动程序中使用多个线程同时从不同地址读取。