PFLT_MESSAGE_NOTIFY回调函数 (fltkernel.h)
FltMgr 每当用户模式应用程序 调用 filterSendMessage 通过客户端端口将消息发送到微型筛选器时,MessageNotifyCallback 回调函数调用。
语法
PFLT_MESSAGE_NOTIFY PfltMessageNotify;
NTSTATUS PfltMessageNotify(
PVOID PortCookie,
PVOID InputBuffer,
ULONG InputBufferLength,
PVOID OutputBuffer,
ULONG OutputBufferLength,
PULONG ReturnOutputBufferLength
)
{...}
参数
PortCookie
[in]指向唯一标识此客户端端口的微筛选器定义的信息的指针。 创建客户端端口时,微型筛选器在其 ConnectNotifyCallback 例程的 ConnectionPortCookie 参数中返回此上下文指针。
InputBuffer
[in]指向调用方分配的缓冲区的指针,其中包含要发送到微筛选器的消息。
InputBuffer 是指向原始解锁的用户模式缓冲区的指针。 此指针仅在用户模式进程的上下文中有效,并且只能在 try/except 块内访问。
FltMgr 调用 ProbeForRead 来验证此指针,但不能保证缓冲区正确对齐。 如果缓冲区包含具有对齐要求的结构,则微筛选器负责执行任何必要的对齐检查。 为此,微型筛选器可以使用 IS_ALIGNED 宏,如 MiniSpy 示例微筛选器所示。
此参数是可选的,可以是 NULL。
InputBufferLength
[in]InputBuffer 指向的缓冲区的大小(以字节为单位)。 如果 InputBuffer 为 NULL,则忽略此参数。
OutputBuffer
[out]指向从微筛选器接收回复(如果有)的调用方分配的缓冲区的指针。
OutputBuffer 是指向原始解锁的用户模式缓冲区的指针。 此指针仅在用户模式进程的上下文中有效,并且只能在 try/except 块内访问。
FltMgr 调用 ProbeForWrite 来验证此指针,但它不确保缓冲区正确对齐。 如果缓冲区包含具有对齐要求的结构,则微筛选器负责执行任何必要的对齐检查。 为此,微型筛选器可以使用 IS_ALIGNED 宏,如 MiniSpy 示例微筛选器所示。
此参数是可选的,可以是 NULL。
OutputBufferLength
[in]OutputBuffer 指向的缓冲区的大小(以字节为单位)。 如果 outputBuffer 为 NULL,则忽略此参数。
ReturnOutputBufferLength
[out]指向调用方分配的变量的指针,该变量接收 OutputBuffer 指向的缓冲区中返回的字节数。
返回值
如果操作成功,则 MessageNotifyCallback 返回STATUS_SUCCESS。 否则,它将返回相应的 NTSTATUS 值,例如:
返回代码 | 意义 |
---|---|
STATUS_INSUFFICIENT_RESOURCES | 没有足够的资源来完成操作。 |
STATUS_INVALID_PARAMETER | 一个或多个输入参数无效。 |
言论
微型筛选器可以选择实现 MessageNotifyCallback。 如果微筛选器未实现此回调,则从用户模式向端口发送数据的任何请求都将收到错误。
有关详细信息,请参阅 用户模式与微型筛选器之间的通信。
要求
要求 | 价值 |
---|---|
标头 | fltkernel.h |
库 | FltMgr.lib |
DLL | FltMgr.sys |
IRQL | PASSIVE_LEVEL |