FltDecodeParameters, fonction (fltkernel.h)
FltDecodeParameters retourne des pointeurs vers l’adresse mdL (memory descriptor list), le pointeur de mémoire tampon, la longueur de la mémoire tampon et les paramètres d’accès souhaités pour une opération d’E/S. Cela permet aux pilotes minifilter d’avoir une instruction switch pour trouver la position de ces paramètres dans les routines d’assistance qui accèdent à l’adresse MDL, au pointeur de mémoire tampon, à la longueur de la mémoire tampon et à l’accès souhaité pour plusieurs types d’opérations.
Syntaxe
NTSTATUS FLTAPI FltDecodeParameters(
[in] PFLT_CALLBACK_DATA CallbackData,
[out] PMDL **MdlAddressPointer,
[out] PVOID **Buffer,
[out] PULONG *Length,
[out, optional] LOCK_OPERATION *DesiredAccess
);
Paramètres
[in] CallbackData
Pointeur vers la structure des données de rappel (FLT_CALLBACK_DATA) pour l’opération d’E/S.
[out] MdlAddressPointer
Pointeur vers une variable fournie par l’appelant qui reçoit un pointeur vers la structure MdlAddress (ou OutputMdlAddress) de la structure de données de rappel (FLT_PARAMETERS) (notez que ce membre est lui-même un pointeur). Ce paramètre est facultatif et peut être NULL. Si l’opération d’E/S n’a pas de champ MDL, ce paramètre reçoit NULL.
[out] Buffer
Pointeur vers une variable fournie par l’appelant qui reçoit un pointeur vers le membre de mémoire tampon approprié (selon le code de fonction principal) dans la structure des paramètres de données de rappel (notez que ce membre est lui-même un pointeur).
[out] Length
Pointeur vers une variable fournie par l’appelant qui reçoit un pointeur vers le membre de longueur de mémoire tampon dans la structure des paramètres de données de rappel. Si l’opération n’a pas de champ de longueur, ce paramètre reçoit NULL.
[out, optional] DesiredAccess
Pointeur vers une variable fournie par l’appelant qui reçoit le type d’accès approprié pour ce type d’opération d’E/S, l’une des IoReadAccess, IoWriteAccessou IoModifyAccess. IoReadAccess signifie que le pilote minifilter peut examiner le contenu de la mémoire tampon, mais ne peut pas modifier le contenu en place. IoWriteAccess et IoModifyAccess, ce qui est équivalent, signifie que le pilote minifilter a un accès en lecture et en écriture à la mémoire tampon.
Valeur de retour
FltDecodeParameters retourne STATUS_SUCCESS ou une valeur NTSTATUS appropriée, par exemple :
Retourner le code | Description |
---|---|
STATUS_INVALID_PARAMETER | La structure des données de rappel (FLT_CALLBACK_DATA) représente une opération d’E/S qui n’a aucun paramètre de mémoire tampon. Il s’agit d’un code d’erreur. |
Remarques
FltDecodeParameters retourne des pointeurs vers les paramètres d’une opération d’E/S, plutôt que les valeurs de paramètre, afin que l’appelant puisse modifier les valeurs des paramètres si vous le souhaitez.
FltDecodeParameters peut être utilisé pour les opérations d’E/S rapides ainsi que pour les opérations basées sur IRP. Il n’est pas significatif pour les opérations de rappel de filtre de système de fichiers (FSFilter), car ces opérations n’ont pas de paramètres de mémoire tampon.
Les opérations IOCTL et FSCTL peuvent avoir une ou deux mémoires tampons, selon la méthode de mise en mémoire tampon utilisée. Dans les cas où l’opération comporte deux mémoires tampons (et deux champs de longueur), FltDecodeParameters retourne les champs OutputBuffer, OutputBufferLengthet/ou OutputMdlAddress les champs appropriés.
Les quatre paramètres ne sont pas retournés pour chaque opération d’E/S. Par exemple, pour une requête IRP_MJ_READ, FltDecodeParameters définit les paramètres de sortie comme suit.
Paramètre | Valeur |
---|---|
MdlAddressPointer | &(CallbackData->Iopb->Parameters.Read.MdlAddress) |
de mémoire tampon | &(CallbackData->Iopb->Parameters.Read.ReadBuffer) |
longueur | &(CallbackData->Iopb->Parameters.Read.Length) |
DesiredAccess | IoWriteAccess |
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
d’en-tête | fltkernel.h (include Fltkernel.h) |
bibliothèque | FltMgr.lib |
IRQL | N’importe quel niveau |