【发布时间】:2019-03-08 19:56:43
【问题描述】:
好的,我会让事情变得简单,我如何使用共享内存将数据从我的用户模式应用程序发送和接收到我的内核驱动程序。用一个实际的互斥体来指示我的请求是否完成。以及我如何调用读取内存函数而不将其添加到 Major_irp 函数,因为我不想添加任何 IOCTL 代码
【问题讨论】:
好的,我会让事情变得简单,我如何使用共享内存将数据从我的用户模式应用程序发送和接收到我的内核驱动程序。用一个实际的互斥体来指示我的请求是否完成。以及我如何调用读取内存函数而不将其添加到 Major_irp 函数,因为我不想添加任何 IOCTL 代码
【问题讨论】:
以下假设是 *nix 风格的内核,但同样的概念也适用于 Windows。不过,其他操作系统内核可能采用不同的概念:
在您的代码中实现mmap 系统调用以将内核端分配的内存映射到用户空间。或者只是实现read 和write 系统调用直接从用户空间内存读/写。
特别是 Linux:如果您想异步访问用户空间内存,请使用 vmsplice 和标志 SPLICE_F_GIFT。像互斥锁或信号量这样的同步原语通常不会跨越用户空间/内核空间边界,如果你想异步操作,你必须实现poll文件操作,当“文件”操作完成时向用户空间发出信号.
【讨论】: