FilterReplyMessage, fonction (fltuser.h)
La fonction FilterReplyMessage répond à un message provenant d’un minifiltre en mode noyau.
Syntaxe
HRESULT FilterReplyMessage(
[in] HANDLE hPort,
[in] PFILTER_REPLY_HEADER lpReplyBuffer,
[in] DWORD dwReplyBufferSize
);
Paramètres
[in] hPort
Handle de port de communication retourné par un appel précédent à FilterConnectCommunicationPort. Ce paramètre est obligatoire et ne peut pas être NULL.
[in] lpReplyBuffer
Pointeur vers une mémoire tampon allouée par l’appelant contenant la réponse à envoyer au minifiltre. La réponse doit contenir une structure FILTER_REPLY_HEADER , mais sinon, son format est défini par l’appelant. Ce paramètre est obligatoire et ne peut pas être NULL.
[in] dwReplyBufferSize
Taille, en octets, de la mémoire tampon vers laquelle pointe le paramètre lpReplyBuffer . Consultez la section Notes.
Valeur retournée
FilterReplyMessage retourne S_OK en cas de réussite. Sinon, elle retourne une valeur d’erreur.
Notes
Une application en mode utilisateur appelle la fonction FilterReplyMessage pour répondre à un message reçu d’un minifiltre en mode noyau.
Pour obtenir un message à partir d’un minifiltre, appelez FilterGetMessage.
Pour envoyer un message à un minifiltre, appelez FilterSendMessage.
Un minifiltre envoie un message à une application en mode utilisateur en appelant FltSendMessage.
En raison des exigences de remplissage de structure (spécifiques au système), la précision est requise lorsque vous définissez la taille des mémoires tampons associées à FltSendMessage et FilterReplyMessage. Par exemple, supposons que les données doivent être envoyées (via FilterReplyMessage) à un minifiltre. Le composant en mode utilisateur peut déclarer la structure suivante pour ce faire :
typedef struct _REPLY_STRUCT
{
FILTER_REPLY_HEADER Header;
MY_STRUCTURE Data; // The structure to be sent to the minifilter.
} REPLY_STRUCT, *PREPLY_STRUCT;
Compte tenu de cette structure, il peut sembler évident que l’appelant de FilterReplyMessage définirait le paramètre dwReplyBufferSize sur sizeof(REPLY_STRUCT)
et le paramètre ReplyLength de FltSendMessage sur la même valeur. Toutefois, en raison des idiosyncrasies de remplissage de structure, sizeof(REPLY_STRUCT)
peut être supérieur à sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
. Si tel est le cas, FltSendMessage retourne STATUS_BUFFER_OVERFLOW.
Par conséquent, nous vous recommandons d’appeler FilterReplyMessage et FltSendMessage (en tirant parti de l’exemple ci-dessus) en définissant dwReplyBufferSize et ReplyLength sur sizeof(FILTER_REPLY_HEADER) + sizeof(MY_STRUCT)
au lieu de sizeof(REPLY_STRUCT)
. Cela garantit que tout remplissage supplémentaire à la fin de la structure REPLY_STRUCT est ignoré.
Spécifications
Client minimal pris en charge | Disponible dans microsoft Windows 2000 Update Rollup 1 pour les systèmes d’exploitation SP4, Windows XP SP2, Windows Server 2003 SP1 et ultérieur. Non disponible dans Windows 2000 SP4 et les systèmes d’exploitation antérieurs. |
Plateforme cible | Universal |
En-tête | fltuser.h (include FltUser.h) |
Bibliothèque | FltLib.lib |
DLL | FltLib.dll |