用户模式应用程序和内核模式驱动程序之间的双向交互?

8
我将要写以下交互内容:
  • 当进程即将启动时,驱动程序会通知用户应用程序,然后等待应用程序的响应。

  • 应用程序将决定是否允许该进程正常创建或立即终止,并将其决定发送回驱动程序。

  • 根据用户应用程序的决定,驱动程序将允许或阻止进程执行。

我的问题是: 从驱动程序向用户模式应用程序发出通知并使驱动程序等待响应的推荐方式是什么?


2
请不要在问题标题中添加标签。除此之外,非常好的问题。 - Scott Chamberlain
你正在使用什么方法来检测即将启动的进程? - Harry Johnston
-Scott Chamberlain:对此感到抱歉。 -Harry Johnston:我使用psSetCreateProcessNotifyRoutineEx来检测新进程的创建。然后我使用它的回调PCREATE_PROCESS_NOTIFY_ROUTINE_EX来处理该新进程。 - Joseph Do
我认为在这种情况下,IOCTL是最好的选择,可以双向使用。如果需要同时做出多个进程的决策而不是逐个进行,则用户模式组件会有些棘手,但并不过分困难。我唯一担心的是,在CreateProcessNotifyEx中阻塞是否合法,但由于它在创建新进程的线程上下文中运行,所以我想应该没问题。 - Harry Johnston
1个回答

6

对于事件通知,您可以使用通知事件。即内核调用IoCreateNotificationEvent和KeSetEvent。用户调用KeWaitForSingleObject。对于用户-内核消息通信,您可以使用IOCTL。

或者,您也可以仅使用命名管道来实现这两个目的。

P.S. 您不能使用PsSetCreateProcessNotifyRoutine()来实现您的目的,因为它仅用于审计,而不是预防/取消。


4
如果他使用的是Vista或更高版本的操作系统,他可以使用PsSetCreateProcessNotifyRoutineEx来防止进程创建。这种技术可行,但他需要确保回调函数是可重入的,并且可能需要为每个进程创建一个事件,在用户空间做出决策时回调函数会休眠在该事件上。其他注意事项包括:确保在用户空间准备好做出决策之前不要阻止进程创建。 - Nik Bougalis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接