filterReplyMessage 函数 (fltuser.h)

FilterReplyMessage 函数从内核模式微筛选器回复消息。

语法

HRESULT FilterReplyMessage(
  [in] HANDLE               hPort,
  [in] PFILTER_REPLY_HEADER lpReplyBuffer,
  [in] DWORD                dwReplyBufferSize
);

参数

[in] hPort

以前调用 FilterConnectCommunicationPort 返回的通信端口句柄。 此参数是必需的,不能为 NULL

[in] lpReplyBuffer

指向调用方分配的缓冲区的指针,该缓冲区包含要发送到微筛选器的回复。 答复必须包含 FILTER_REPLY_HEADER 结构,但否则其格式为调用方定义。 此参数是必需的,不能为 NULL

[in] dwReplyBufferSize

lpReplyBuffer 参数指向的缓冲区的大小(以字节为单位)。 请参阅“备注”部分。

返回值

如果成功,FilterReplyMessage 将返回S_OK。 否则,它将返回错误值。

备注

用户模式应用程序调用 FilterReplyMessage 函数来回复从内核模式微筛选器收到的消息。

若要从微筛选器获取消息,请调用 FilterGetMessage

若要向微筛选器发送消息,请调用 FilterSendMessage

微筛选器通过调用 FltSendMessage 将消息发送到用户模式应用程序。

重要说明  

由于 (系统特定的) 结构 填充 要求,在设置与 FltSendMessageFilterReplyMessage 关联的缓冲区大小时,需要准确性。 例如,假设数据必须通过 FilterReplyMessage) 发送到微筛选器 (。 用户模式组件可以声明以下结构来执行此操作:

typedef struct _REPLY_STRUCT
{
     FILTER_REPLY_HEADER Header;
     MY_STRUCTURE Data;  // The structure to be sent to the minifilter.
} REPLY_STRUCT, *PREPLY_STRUCT;

鉴于此结构,FilterReplyMessage 的调用方将 dwReplyBufferSize 参数设置为 sizeof(REPLY_STRUCT)将 FltSendMessageReplyLength 参数设置为同一值,这似乎很明显。 但是,由于结构填充特性, sizeof(REPLY_STRUCT) 可能大于 sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)。 如果是这种情况, FltSendMessage 返回STATUS_BUFFER_OVERFLOW。

因此,建议调用 FilterReplyMessageFltSendMessage (利用上述示例) 通过将 dwReplyBufferSizeReplyLength 都设置为 sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT) 而不是 sizeof(REPLY_STRUCT)。 这可确保忽略 REPLY_STRUCT 结构末尾的任何额外填充。

 

要求

   
最低受支持的客户端 适用于 SP4、Windows XP SP2、Windows Server 2003 SP1 及更高版本的操作系统的 Microsoft Windows 2000 更新汇总 1。 在 Windows 2000 SP4 和更早版本的操作系统中不可用。
目标平台 通用
标头 fltuser.h (包括 FltUser.h)
Library FltLib.lib
DLL FltLib.dll

请参阅

FILTER_REPLY_HEADER

FilterConnectCommunicationPort

FilterGetMessage

FilterSendMessage

FltSendMessage