Función FilterReplyMessage (fltuser.h)
La función FilterReplyMessage responde a un mensaje de un minifiltro en modo kernel.
Sintaxis
HRESULT FilterReplyMessage(
[in] HANDLE hPort,
[in] PFILTER_REPLY_HEADER lpReplyBuffer,
[in] DWORD dwReplyBufferSize
);
Parámetros
[in] hPort
Identificador de puerto de comunicación devuelto por una llamada anterior a FilterConnectCommunicationPort. Este parámetro es obligatorio y no puede ser NULL.
[in] lpReplyBuffer
Puntero a un búfer asignado por el autor de la llamada que contiene la respuesta que se va a enviar al minifiltro. La respuesta debe contener una estructura de FILTER_REPLY_HEADER , pero de lo contrario, su formato es definido por el autor de la llamada. Este parámetro es obligatorio y no puede ser NULL.
[in] dwReplyBufferSize
Tamaño, en bytes, del búfer al que apunta el parámetro lpReplyBuffer . Consulte la sección Comentarios.
Valor devuelto
FilterReplyMessage devuelve S_OK si se ejecuta correctamente. De lo contrario, devuelve un valor de error.
Comentarios
Una aplicación en modo de usuario llama a la función FilterReplyMessage para responder a un mensaje recibido de un minifiltro en modo kernel.
Para obtener un mensaje de un minifiltro, llame a FilterGetMessage.
Para enviar un mensaje a un minifiltro, llame a FilterSendMessage.
Un minifiltro envía un mensaje a una aplicación en modo de usuario llamando a FltSendMessage.
Debido a los requisitos de relleno de estructura (específicos del sistema), se requiere precisión cuando se establece el tamaño de los búferes asociados a FltSendMessage y FilterReplyMessage. Por ejemplo, supongamos que los datos deben enviarse (a través de FilterReplyMessage) a un minifiltro. El componente en modo de usuario puede declarar la siguiente estructura para hacerlo:
typedef struct _REPLY_STRUCT
{
FILTER_REPLY_HEADER Header;
MY_STRUCTURE Data; // The structure to be sent to the minifilter.
} REPLY_STRUCT, *PREPLY_STRUCT;
Dada esta estructura, podría parecer obvio que el autor de la llamada de FilterReplyMessage establecería el parámetro sizeof(REPLY_STRUCT)
dwReplyBufferSize en y el parámetro ReplyLength de FltSendMessage en el mismo valor. Sin embargo, debido al relleno de estructuras idiosincrónicas, sizeof(REPLY_STRUCT)
puede ser mayor que sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
. Si este es el caso, FltSendMessage devuelve STATUS_BUFFER_OVERFLOW.
Por lo tanto, se recomienda llamar a FilterReplyMessage y FltSendMessage (aprovechando el ejemplo anterior) estableciendo dwReplyBufferSize y ReplyLength en sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
en lugar de sizeof(REPLY_STRUCT)
. Esto garantiza que se omita cualquier relleno adicional al final de la estructura de REPLY_STRUCT .
Requisitos
Cliente mínimo compatible | Disponible en el paquete acumulativo de actualizaciones 1 de Microsoft Windows 2000 para SP4, Windows XP SP2, Windows Server 2003 SP1 y sistemas operativos posteriores. No está disponible en Windows 2000 SP4 y en sistemas operativos anteriores. |
Plataforma de destino | Universal |
Encabezado | fltuser.h (include FltUser.h) |
Library | FltLib.lib |
Archivo DLL | FltLib.dll |