Функция 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 |