驱动程序和用户模式服务之间的消息

Messages between driver and user mode service

如何从驱动程序向用户模式服务发送通知?同时,我希望它只在一个方向上起作用,即服务无法向驱动程序发送消息。 是的,我知道 IOCTL、事件和所有这些东西……但也许我不知道某些技术

Communication Between User Mode and Kernel Mode

过滤器管理器支持用户态和内核态通过通信端口进行通信。 minifilter 驱动程序通过指定要应用于通信端口对象的安全描述符来控制端口的安全性。通过通信端口的通信没有缓冲,因此速度更快、效率更高。用户模式应用程序或服务可以回复来自 minifilter 驱动程序的双向通信消息。

当 minifilter 驱动程序创建一个通信服务器端口时,它会隐式地开始侦听该端口上的传入连接。当用户模式调用者尝试连接到端口时,过滤器管理器调用 minifilter 驱动程序的 ConnectNotifyCallback 例程,并带有新创建的连接的句柄。当过滤器管理器重新获得控制权时,它会向用户模式调用者传递一个单独的文件句柄,该文件句柄表示用户模式调用者到连接的端点。此句柄可用于将 I/O 完成端口与侦听器端口相关联。

仅当用户模式调用方具有端口上的安全描述符所指定的足够访问权限时,才会接受连接。每个到端口的连接都有自己的消息队列和专用端点。

关闭任一端点(内核或用户)将终止该连接。当用户模式调用者关闭它的端点句柄时,过滤器管理器调用微过滤器驱动程序的DisconnectNotifyCallback例程,这样微过滤器驱动程序可以关闭它的连接句柄。

关闭通信服务器端口会阻止新连接,但不会终止现有连接。当 minifilter 驱动程序卸载时,过滤器管理器终止现有连接。


用于用户模式和内核模式之间通信的过滤器管理器例程

过滤器管理器为内核模式微过滤器驱动程序提供以下支持例程以与用户模式应用程序通信:

为用户模式应用程序提供以下支持例程以与微过滤器驱动程序通信:


用于用户模式和内核模式之间通信的 Minifilter 驱动程序回调例程

以下 minifilter 驱动程序回调例程作为参数传递给 FltCreateCommunicationPort

Callback Routine Name Callback Routine Type
ConnectNotifyCallback PFLT_CONNECT_NOTIFY
DisconnectNotifyCallback PFLT_DISCONNECT_NOTIFY
MessageNotifyCallback PFLT_MESSAGE_NOTIFY

了解更多:Examples