Funzione FilterReplyMessage (fltuser.h)
La funzione FilterReplyMessage risponde a un messaggio da un minifilter in modalità kernel.
Sintassi
HRESULT FilterReplyMessage(
[in] HANDLE hPort,
[in] PFILTER_REPLY_HEADER lpReplyBuffer,
[in] DWORD dwReplyBufferSize
);
Parametri
[in] hPort
Handle della porta di comunicazione restituito da una chiamata precedente a FilterConnectCommunicationPort. Questo parametro è obbligatorio e non può essere NULL.
[in] lpReplyBuffer
Puntatore a un buffer allocato del chiamante contenente la risposta da inviare al minifilter. La risposta deve contenere una struttura FILTER_REPLY_HEADER , ma in caso contrario, il relativo formato è definito dal chiamante. Questo parametro è obbligatorio e non può essere NULL.
[in] dwReplyBufferSize
Dimensioni, in byte, del buffer a cui punta il parametro lpReplyBuffer . Vedere la sezione relativa alle osservazioni.
Valore restituito
FilterReplyMessage restituisce S_OK se riuscito. In caso contrario, restituisce un valore di errore.
Commenti
Un'applicazione in modalità utente chiama la funzione FilterReplyMessage per rispondere a un messaggio ricevuto da un minifilter in modalità kernel.
Per ottenere un messaggio da un minifiltro, chiamare FilterGetMessage.
Per inviare un messaggio a un minifiltro, chiamare FilterSendMessage.
Un minifilter invia un messaggio a un'applicazione in modalità utente chiamando FltSendMessage.
A causa dei requisiti di riempimento della struttura (specifici del sistema), l'accuratezza è necessaria quando si impostano le dimensioni dei buffer associati a FltSendMessage e FilterReplyMessage. Si supponga, ad esempio, che i dati vengano inviati (tramite FilterReplyMessage) a un minifilter. Il componente in modalità utente potrebbe dichiarare la struttura seguente a tale scopo:
typedef struct _REPLY_STRUCT
{
FILTER_REPLY_HEADER Header;
MY_STRUCTURE Data; // The structure to be sent to the minifilter.
} REPLY_STRUCT, *PREPLY_STRUCT;
Dato questa struttura, potrebbe sembrare ovvio che il chiamante di FilterReplyMessage imposta il parametro dwReplyBufferSize su sizeof(REPLY_STRUCT)
e il parametro ReplyLength di FltSendMessage sullo stesso valore. Tuttavia, a causa delle idioincrone di riempimento della struttura, sizeof(REPLY_STRUCT)
potrebbe essere maggiore di sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
. Se si tratta del caso, FltSendMessage restituisce STATUS_BUFFER_OVERFLOW.
Pertanto, è consigliabile chiamare FilterReplyMessage e FltSendMessage (sfruttando l'esempio precedente) impostando dwReplyBufferSize e ReplyLength invece sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
di sizeof(REPLY_STRUCT)
. Ciò garantisce che qualsiasi riempimento aggiuntivo alla fine della struttura REPLY_STRUCT venga ignorato.
Requisiti
Client minimo supportato | Disponibile in Microsoft Windows 2000 Update Rollup 1 for SP4, Windows XP SP2, Windows Server 2003 SP1 e versioni successive. Non disponibile in Windows 2000 SP4 e nei sistemi operativi precedenti. |
Piattaforma di destinazione | Universale |
Intestazione | fltuser.h (include FltUser.h) |
Libreria | FltLib.lib |
DLL | FltLib.dll |