Поделиться через


функция обратного вызова PFLT_MESSAGE_NOTIFY (fltkernel.h)

функция обратного вызова FltMgr вызывает функцию обратного вызова MessageNotifyCallback, когда приложение в режиме пользователя вызывает FilterSendMessage, чтобы отправить сообщение минифильтру через клиентский порт.

Синтаксис

PFLT_MESSAGE_NOTIFY PfltMessageNotify;

NTSTATUS PfltMessageNotify(
  PVOID PortCookie,
  PVOID InputBuffer,
  ULONG InputBufferLength,
  PVOID OutputBuffer,
  ULONG OutputBufferLength,
  PULONG ReturnOutputBufferLength
)
{...}

Параметры

PortCookie

[in] Указатель на сведения, определяемые минифильтром, которые однозначно идентифицируют этот клиентский порт. При создании клиентского порта мини-фильтр вернул этот указатель контекста в параметре ConnectionPortCookie параметра ConnectNotifyCallback.

InputBuffer

[in] Указатель на выделенный вызывающим буфером, содержащим сообщение, которое будет отправлено мини-фильтру.

InputBuffer — это указатель на необработанный буфер пользовательского режима. Этот указатель действителен только в контексте процесса пользовательского режима и должен быть доступен только в пределах блокировки.

FltMgr вызывает ProbeForRead для проверки этого указателя, но не гарантирует правильность выравнивания буфера. Если буфер содержит структуры, имеющие требования к выравниванию, минифильтр отвечает за выполнение любых необходимых проверок выравнивания. Для этого минифильтр может использовать макрос IS_ALIGNED, как показано в примере мини-фильтра MiniSpy MiniSpy.

Этот параметр является необязательным и может иметь значение NULL.

InputBufferLength

[in] Размер в байтах буфера, на который InputBuffer указывает. Этот параметр игнорируется, если inputBuffer имеет значение NULL.

OutputBuffer

[out] Указатель на выделенный вызывающим буфером, который получает ответ(если таковой) из мини-фильтра.

OutputBuffer — это указатель на необработанный, разблокированный буфер пользовательского режима. Этот указатель действителен только в контексте процесса пользовательского режима и должен быть доступен только в пределах блокировки.

FltMgr вызывает ProbeForWrite для проверки этого указателя, но не гарантирует правильность выравнивания буфера. Если буфер содержит структуры, имеющие требования к выравниванию, минифильтр отвечает за выполнение любых необходимых проверок выравнивания. Для этого минифильтр может использовать макрос IS_ALIGNED, как показано в примере мини-фильтра MiniSpy 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

См. также

ConnectNotifyCallback

FilterSendMessage

FltCreateCommunicationPort