用户模式通信的驱动程序

时间:2018-10-31 14:59:03

标签: c windows winapi kernel driver

我正在尝试编写一种工具来监视进程。每当创建具有SYSTEM特权的高特权进程时,它将提醒用户。 我通过监视每个进程创建的驱动程序和一个用户模式应用程序来执行此操作,以检查它是否在SYSTEM下运行以及是否发出警报。 为此,用户模式应用应收听驱动程序。我正在尝试通过事件。每当创建进程时,驱动程序都会使用IoCreateNotificationEvent(使用模式应用程序通过WaitForSingleObject进行侦听)向事件发出信号,然后该应用程序将向驱动程序发送IRP以获取pid。 这对我来说不太好用,我正在寻找其他方法来实现从驱动程序到监听用户模式应用程序的通信,但我找不到。 我该如何运作?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

通常的方法是使用异步IOCTL,完全忘记事件,如果没有要读取的出色进程创建,则由驱动程序保存IOCTL,然后在获得新进程时完成IOCTL。这确实要求客户端在流程创建之前提交IOCTL请求。为了获得最佳结果,我会说将您的设备句柄绑定到IOCP(我发现IOCP远比需要跟踪哪个事件发生在哪个OVERPAPPED上要容易得多)。

答案 1 :(得分:0)

从驱动程序到用户模式进程的另一种通信方式是让用户模式进程在消息模式下打开管道并侦听来自内核的消息。它比实现异步IOCTL更简单,因为您不必处理可能需要取消的挂起IOCTL。确保打开管道时,它是正确的ACL,以便只有内核才能与用户模式进程打开的管道对话。