PFLT_MESSAGE_NOTIFY función de devolución de llamada (fltkernel.h)
FltMgr llama a la función de devolución de llamada MessageNotifyCall back de un minifiltro cada vez que una aplicación en modo de usuario llama a FilterSendMessage para enviar un mensaje al minifiltro a través del puerto de cliente.
Sintaxis
PFLT_MESSAGE_NOTIFY PfltMessageNotify;
NTSTATUS PfltMessageNotify(
PVOID PortCookie,
PVOID InputBuffer,
ULONG InputBufferLength,
PVOID OutputBuffer,
ULONG OutputBufferLength,
PULONG ReturnOutputBufferLength
)
{...}
Parámetros
PortCookie
[in] Puntero a la información definida por minifiltro que identifica de forma única este puerto de cliente. Cuando se creó el puerto de cliente, el minifiltro devolvió este puntero de contexto en la parámetro ConnectionPortCookie de su rutina de ConnectNotifyCallback.
InputBuffer
[in] Puntero a un búfer asignado por el autor de la llamada que contiene el mensaje que se va a enviar al minifiltro.
InputBuffer es un puntero a un búfer sin procesar y desbloqueado en modo de usuario. Este puntero solo es válido en el contexto del proceso en modo de usuario y solo se debe tener acceso desde dentro de un try/except bloque.
FltMgr llama a ProbeForRead para validar este puntero, pero no garantiza que el búfer esté correctamente alineado. Si el búfer contiene estructuras que tienen requisitos de alineación, el minifiltro es responsable de realizar las comprobaciones de alineación necesarias. Para ello, el minifiltro puede usar la macro IS_ALIGNED como se muestra en el minifiltro de ejemplo MiniSpy.
Este parámetro es opcional y puede ser NULL.
InputBufferLength
[in] Tamaño, en bytes, del búfer al que apunta InputBuffer. Este parámetro se omite si InputBuffer es NULL.
OutputBuffer
[out] Puntero a un búfer asignado por el autor de la llamada que recibe la respuesta, si existe, desde el minifiltro.
outputBuffer es un puntero a un búfer sin formato desbloqueado en modo de usuario. Este puntero solo es válido en el contexto del proceso en modo de usuario y solo se debe tener acceso desde dentro de un try/except bloque.
FltMgr llama ProbeForWrite para validar este puntero, pero no garantiza que el búfer esté correctamente alineado. Si el búfer contiene estructuras que tienen requisitos de alineación, el minifiltro es responsable de realizar las comprobaciones de alineación necesarias. Para ello, el minifiltro puede usar la macro IS_ALIGNED como se muestra en el minifiltro de ejemplo MiniSpy.
Este parámetro es opcional y puede ser NULL.
OutputBufferLength
[in] Tamaño, en bytes, del búfer al que outputBuffer apunta. Este parámetro se omite si outputBuffer es NULL.
ReturnOutputBufferLength
[out] Puntero a una variable asignada por el autor de la llamada que recibe el número de bytes devueltos en el búfer al que outputBuffer apunta.
Valor devuelto
messageNotifyCallback devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, devuelve un valor NTSTATUS adecuado, como:
Código devuelto | Significado |
---|---|
STATUS_INSUFFICIENT_RESOURCES | No hay suficientes recursos para completar la operación. |
STATUS_INVALID_PARAMETER | Uno o varios de los parámetros de entrada no son válidos. |
Observaciones
Los minifiltros pueden implementar opcionalmente MessageNotifyCallback. Si un minifiltro no implementa esta devolución de llamada, cualquier solicitud realizada desde el modo de usuario para enviar datos al puerto recibirá un error.
Para obtener más información, vea Comunicación entre el modo de usuario y los minifiltros.
Requisitos
Requisito | Valor |
---|---|
encabezado de |
fltkernel.h |
biblioteca de |
FltMgr.lib |
DLL de |
FltMgr.sys |
irQL | PASSIVE_LEVEL |