好吧,我只是简单地说,我怎样才能使用共享内存从我的用户模式应用程序发送和接收数据到我的内核驱动程序。使用实际的互斥锁来指示我的请求是否已完成。如何在不将其添加到Major_irp函数的情况下调用读取内存函数,因为我不想添加任何IOCTL代码
以下假设是* nix样式的内核,但相同的概念也转换为Windows。但是,其他操作系统内核可能采用不同的概念:
在代码中实现mmap
系统调用,将内核端分配的内存映射到用户空间。或者直接从/向用户空间内存实现read
和write
系统调用。
特别是对Linux:如果要异步访问用户空间内存,请使用带有标志vmsplice
的SPLICE_F_GIFT
。同步原语(如互斥或信号量)通常不会跨越用户空间/内核空间边界,如果要异步操作,则必须执行poll
文件操作,以便在“文件”操作完成时向用户空间发送信号。