c - 通过 memcpy 将数据从用户应用程序复制到内核驱动程序
问题描述
好的,我只是让事情变得简单,我如何使用共享内存从我的用户模式应用程序向我的内核驱动程序发送和接收数据。用一个实际的互斥体来指示我的请求是否完成。以及我如何调用读取内存函数而不将其添加到 Major_irp 函数,因为我不想添加任何 IOCTL 代码
解决方案
以下假设是 *nix 风格的内核,但同样的概念也适用于 Windows。不过,其他操作系统内核可能采用不同的概念:
在您的代码中实现mmap
系统调用以将内核端分配的内存映射到用户空间。或者只是直接从/向用户空间内存实现read
和write
系统调用读/写。
专门针对 Linux:如果您想异步访问用户空间内存,请使用vmsplice
with flag SPLICE_F_GIFT
。像互斥锁或信号量这样的同步原语通常不会跨越用户空间/内核空间的边界,如果你想异步操作,你必须实现poll
文件操作,以便在“文件”操作完成时向用户空间发出信号。
推荐阅读
- python - 性能随着数组元素嵌套的增加而降低
- java - 如何在Android中动态创建类
- javascript - 如何使用 Vue 应用程序(未构建)NPM 作为 js 应用程序中的站点
- azure - Azure DevOps:Powershell 'Get-AzSubscription' 无法识别
- javascript - 在 Angular cli 中配置代理
- google-visualization - Google Charts:是否可以将表格作为横轴?
- excel - jsreport excel xml属性将ISO-8601日期格式设置为自定义`d-mmm-yy`
- django - Django og图形标签问题
- css - 如何排除父 div 中的特定 div
- jquery - 添加以下脚本时导航栏链接不起作用