首页 > 解决方案 > 通过 memcpy 将数据从用户应用程序复制到内核驱动程序

问题描述

好的,我只是让事情变得简单,我如何使用共享内存从我的用户模式应用程序向我的内核驱动程序发送和接收数据。用一个实际的互斥体来指示我的请求是否完成。以及我如何调用读取内存函数而不将其添加到 Major_irp 函数,因为我不想添加任何 IOCTL 代码

标签: ckernelmemcpyirp

解决方案


以下假设是 *nix 风格的内核,但同样的概念也适用于 Windows。不过,其他操作系统内核可能采用不同的概念:

在您的代码中实现mmap系统调用以将内核端分配的内存映射到用户空间。或者只是直接从/向用户空间内存实现readwrite系统调用读/写。

专门针对 Linux:如果您想异步访问用户空间内存,请使用vmsplicewith flag SPLICE_F_GIFT。像互斥锁或信号量这样的同步原语通常不会跨越用户空间/内核空间的边界,如果你想异步操作,你必须实现poll文件操作,以便在“文件”操作完成时向用户空间发出信号。


推荐阅读