minifilter 与用户态的通信

  • 时间:
  • 浏览:0

    端口名这类L"\MyFilterPort"

    线程池池运行运行通过返回的端口句柄与minifilter通信。

====================================================================

应用层的步骤

    minifilter都要把该句柄传递FltSendMessage这类的函数,作为第俩个参数。

    message发送到minifilter的消息通知回调函数中,在这里处置消息。

    DisconnectNotifyCallback 客户端所有连接端口中断,可能性minifilter卸载时的回调。

    *MessageNotifyCallback 用户态消息处置回调。

    用户态通过FilterReplyMessage发送的消息,全是这里处置。

  sizeof(REPLY_STRUCT) 可能性比sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)大。

  很多很多建议使用里边的妙招。

    与FltCreateCommunicationPort返回的ServerPort 不同。

    后来一般在DisconnectNotifyCallback 中调用FltCloseClientPort释放。

    当然可能性希望有replay,不不需要 outbuffer参数不不需要 为空。

驱动层的步骤

    对于安全对象,都要设置OBJ_KERNEL_HANDLE。

    ServerPort 监听客户端连接请求的端口。

    第俩个 参数ObjectAttributes 通过InitializeObjectAttributes初始化,其中包含了端口名称。方便应用层打开。

    ConnectNotifyCallback 用户态连接回调,这里对多个连接进行后来 区别操作。

    比如ClientPort,表示用户态与内核建立的新连接的客户端端口句柄。

  } REPLY_STRUCT, *PREPLY_STRUCT;

  FilterReplyMessage

    注意参数lpReplyBuffer,都要包含FILTER_REPLY_HEADER 行态。

  *有点儿注意,FltSendMessage 与FilterReplyMessage的buffersize,可能性padding的缘故,都要精确指定大小。

  typedef struct _REPLY_STRUCT

  {

    注意参数lpMessageBuffer,都要包含FILTER_MESSAGE_HEADER 行态。

    可能性是同步操作,会总爱等待图片直到收到消息。

    可能性是异步操作,返回ERROR_IO_PENDING,通过重叠行态的事件来得知消息是是否是被传递。

    哪些地方地方回调函数在内核创建通信端口时指定  MessageNotifyCallback。

    该操作是同步的。调用者存在等待图片情况,直到消息被传递并收到minifilter的replay。