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 将消息发送到用户模式应用程序。
由于 (系统特定的) 结构 填充 要求,在设置与 FltSendMessage 和 FilterReplyMessage 关联的缓冲区大小时,需要准确性。 例如,假设数据必须通过 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)
,将 FltSendMessage 的 ReplyLength 参数设置为同一值,这似乎很明显。 但是,由于结构填充特性, sizeof(REPLY_STRUCT)
可能大于 sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
。 如果是这种情况, FltSendMessage 返回STATUS_BUFFER_OVERFLOW。
因此,建议调用 FilterReplyMessage 和 FltSendMessage (利用上述示例) 通过将 dwReplyBufferSize 和 ReplyLength 都设置为 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 |