1

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

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

这是我的实际示例:我有一个内核回调函数,可以随时使用STRING调用。然后,我需要将其中的字符串传递给我当前正在运行的用户模式进程并发出警报。

4

1 回答 1

2

内核模式到用户模式的进程间通信有很多方法,不同的要求可以适应不同的技术。

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

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

要使用来自 Filesystem Mini-Filter 设备驱动程序的命名管道,您有FltCreateNamedPipeFile

从命名管道的想法继续前进,您可以选择本地过程调用!然而,在文档方面又一次出现了另一个死胡同。不过,在内核模式下作为客户端执行此操作相对简单。不过,有一个带有文件系统微型过滤器设备驱动程序的端口的文档化接口:FltCreateCommunicationPort

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

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

于 2018-06-20T21:53:51.397 回答