【问题标题】:Two-way interaction between user-mode app and kernel-mode driver?用户模式应用程序和内核模式驱动程序之间的双向交互?
【发布时间】:2013-03-30 00:31:13
【问题描述】:

我要写如下交互:

  • 当有进程即将启动时,驱动程序会通知用户应用程序,然后等待应用程序的响应。

  • 应用程序将决定是否允许该进程正常创建或立即终止,并发送 将决定权交还给司机。

  • 基于用户应用的决定。然后驱动程序将允许或阻止进程执行。

我的问题是:推荐的方法是从驱动程序通知用户模式应用程序,然后让驱动程序等待响应?

【问题讨论】:

  • 请不要在问题标题中添加标签。除此之外,非常好的问题。
  • 您使用什么方法来检测即将启动的进程?
  • -斯科特·张伯伦:很抱歉。 -Harry Johnston:我使用 psSetCreateProcessNotifyRoutineEx 来检测新进程的创建。然后我使用它的回调 PCREATE_PROCESS_NOTIFY_ROUTINE_EX 来处理这个新进程。
  • 我认为 IOCTL 在这种情况下是最好的,双向。如果多个进程的决策必须并行而不是一次一个,那么用户模式组件会有点棘手,但并非不合理。我心中唯一的疑问是在CreateProcessNotifyEx 中阻塞是否合法,但由于它在创建新进程的线程的上下文中运行,我想应该没问题。

标签: windows process kernel driver


【解决方案1】:

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

或者,您可以同时使用命名管道。

附:您不能将 PsSetCreateProcessNotifyRoutine() 用于您的目的,因为它仅用于审核,而不用于预防/取消。

【讨论】:

  • 如果他使用的是 Vista 及更高版本,他可以使用PsSetCreateProcessNotifyRoutineEx 来阻止创建进程。这种技术会起作用,但他需要确保他的回调是可重入的,并可能创建一个事件每个进程,回调将在用户空间做出决定时休眠。其他注意事项:确保在用户空间准备好做出决定之前不要阻止进程创建。
猜你喜欢
  • 2015-04-14
  • 2012-12-13
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2015-11-19
  • 2016-06-10
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多