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


Функция 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) , а для параметра ReplyLengthfltSendMessage — то же значение. Однако из-за особенности sizeof(REPLY_STRUCT) заполнения структуры может быть больше , чем sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT). В этом случае Функция FltSendMessage возвращает STATUS_BUFFER_OVERFLOW.

Поэтому рекомендуется вызывать Методы FilterReplyMessage и FltSendMessage (используя приведенный выше пример), установив для dwReplyBufferSize и ReplyLengthsizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT) значение вместо sizeof(REPLY_STRUCT). Это гарантирует, что любое дополнительное заполнение в конце структуры REPLY_STRUCT игнорируется.

 

Требования

   
Минимальная версия клиента Доступно в пакете обновления 1 для Microsoft Windows 2000 с пакетом обновления 1 для операционных систем с пакетом обновления 4 (SP4), Windows XP с пакетом обновления 2 (SP2), Windows Server 2003 с пакетом обновления 1 (SP1) и более поздних версий. Недоступно в Операционных системах Windows 2000 с пакетом обновления 4 (SP4) и более ранних версий.
Целевая платформа Универсальное
Верхняя часть fltuser.h (включая FltUser.h)
Библиотека FltLib.lib
DLL FltLib.dll

См. также раздел

FILTER_REPLY_HEADER

FilterConnectCommunicationPort

FilterGetMessage

FilterSendMessage

FltSendMessage