gpt4 book ai didi

c - 如何将可变大小数组从 Windows 内核驱动程序传递到用户模式进程?

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:08 25 4
gpt4 key购买 nike

我正在学习 Windows 内核编程,我想知道如何将字节数组从内核驱动程序传递到我的用户模式应用程序,内核驱动程序在其中启动调用?

如果我要在用户模式进程中执行此操作(例如,从服务到 GUI 应用程序),我会使用命名管道或共享内存以及命名事件和命名互斥锁来进行同步。但是我不知道在内核驱动程序方面该做什么。

这是我的实际示例:我有一个内核回调函数,可以随时使用 STRING 调用.然后我需要将字符串从其中传递到我当前运行的用户模式进程并提醒它。

最佳答案

内核态到用户态的进程间通信有很多种方式,不同的需求可以采用不同的技术。

对于初学者,您可以选择命名管道(即使在内核模式下)。但是,有些事情您应该知道……它没有针对普通内核模式设备驱动程序的正式文档(尽管文件系统迷你过滤器设备驱动程序有一个文档化的接口(interface))。

如果你想使用来自普通内核模式设备驱动程序的命名管道,你必须将地址定位到 NtCreateNamedPipeFile 或依赖 IoCreateFile (NtCreateNamedPipeFile 在内部依赖于它,使用未记录的结构)。

要使用来自文件系统微型过滤器设备驱动程序的命名管道,您有 FltCreateNamedPipeFile .

从命名管道的想法开始,您可以选择本地过程调用!然而,在文档方面又出现了另一个死胡同。不过,在内核模式下作为客户端来执行它是相对直接的。虽然有一个带有文件系统迷你过滤器设备驱动程序的端口的文档化接口(interface):FltCreateCommunicationPort .

再次继续,您可以附加到用户模式客户端并直接写入其内存。

如果你真的想要,你可以依靠像共享事件这样简单的东西来通知用户模式客户端你刚刚附加到它并写入它的虚拟内存。

关于c - 如何将可变大小数组从 Windows 内核驱动程序传递到用户模式进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com