Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La routine FltLockUserBuffer verrouille la mémoire tampon utilisateur pour une opération d’E/S donnée.
Syntaxe
NTSTATUS FLTAPI FltLockUserBuffer(
[in] PFLT_CALLBACK_DATA CallbackData
);
Paramètres
[in] CallbackData
Pointeur vers la structure de données de rappel FLT_CALLBACK_DATA pour l’opération d’E/S.
Valeur de retour
FltLockUserBuffer retourne STATUS_SUCCESS si elle verrouille correctement la mémoire tampon de l’utilisateur (ou si la mémoire tampon a déjà été verrouillée par un appel précédent à FltLockUserBuffer.) Sinon, elle retourne une valeur NTSTATUS appropriée, telle que l’une des suivantes :
| Retourner le code | Description |
|---|---|
| STATUS_INSUFFICIENT_RESOURCES | FltLockUserBuffer a rencontré un échec d’allocation de pool. Il s’agit d’un code d’erreur. |
| STATUS_INVALID_PARAMETER | Un paramètre non valide a été rencontré. Par exemple, l’opération d’E/S n’a pas de paramètre MDL, ou les opérations d’E/S IRP_MJ_READ ou IRP_MJ_WRITE ont un code mineur de IRP_MN_MDL. Il s’agit d’un code d’erreur. |
Remarques
Pour des performances optimales, les pilotes de filtre ne doivent pas appeler FltLockUserBuffer, sauf si absolument nécessaire. Le ralentissement des performances n’est pas dû à FltLockUserBuffer lui-même, mais plutôt à la pénalité de performances encourue par l’appel suivant à MmGetSystemAddressForMdlSafe; pour plus d’informations, consultez les remarques ultérieures.
Un pilote minifilter peut appeler FltLockUserBuffer pour verrouiller la mémoire tampon utilisateur pour l’une des opérations d’E/S suivantes :
- IRP_MJ_DEVICE_CONTROL
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_INTERNAL_DEVICE_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_READ (sauf avec IRP_MN_MDL)
- IRP_MJ_SET_EA
- IRP_MJ_SET_QUOTA
- IRP_MJ_WRITE (sauf avec IRP_MN_MDL)
FltLockUserBuffer détermine la méthode d’accès appropriée (IoReadAccess, IoWriteAccess ou IoModifyAccess) à appliquer pour la mémoire tampon verrouillée en fonction du type d’opération d’E/S.
FltLockUserBuffer définit le membre MdlAddress (ou OutputMdlAddress) dans la structure des paramètres de données de rappel (FLT_PARAMETERS) pour pointer vers le MDL des pages verrouillées. S’il n’y a pas de MDL, FltLockUserBuffer en alloue un. (Notez que FltMgr ne peut pas générer un MDL avant que le système de fichiers ne le fasse, c’est pourquoi FltLockUserBuffer retourne STATUS_INVALID_PARAMETER pour IRP_MJ_READ ou IRP_MJ_WRITE avec IRP_MN_MDL).
Si la structure des paramètres de données de rappel contient une mémoire tampon système (Irp->AssociatedIrp.SystemBuffer) et ne contient pas de mémoire tampon utilisateur (Irp->UserBuffer), FltLockUserBuffer verrouille la mémoire tampon système. S’il n’existe pas de MDL pour la mémoire tampon système, FltLockUserBuffer en alloue une.
Si la structure des paramètres de données de rappel contient une mémoire tampon utilisateur, FltLockUserBuffersondes et verrouille la mémoire tampon utilisateur.
L’appelant peut s’exécuter dans n’importe quel contexte de processus. FltLockUserBuffer verrouille automatiquement la mémoire tampon dans le contexte de processus approprié.
Si FltLockUserBuffer est appelé à partir d’une routine de rappel de pré-opération (PFLT_PRE_OPERATION_CALLBACK) et qu’elle alloue un MDL, FltLockUserBuffer définit l’indicateur de FLTFL_CALLBACK_DATA_DIRTY dans la structure de données de rappel (FLT_CALLBACK_DATA) afin que le système d’E/S libère le MDL lorsque l’opération d’E/S est terminée.
Pour conserver les entrées de table de pages système (PTE), FltLockUserBuffer ne mappe pas les pages verrouillées. Après avoir appelé FltLockUserBuffer, l’appelant doit appeler MmGetSystemAddressForMdlSafe, en passant le membre MdlAddress (ou OutputMdlAddress) dans la structure des paramètres de données de rappel comme valeur du paramètre Mdl, pour obtenir une mémoire tampon système qui représente cette mémoire.
Lorsque la structure de données de rappel est libérée, la mémoire tampon verrouillée est automatiquement déverrouillée et le MDL est libéré. L’appelant ne doit jamais libérer le MDL ; le système d’E/S effectue automatiquement.
FltLockUserBuffer peut être appelé pour des opérations d’E/S rapides et basées sur IRP.
Exigences
| Exigence | Valeur |
|---|---|
| plateforme cible | Universel |
| d’en-tête | fltkernel.h (include Fltkernel.h) |
| bibliothèque | FltMgr.lib |
| DLL | Fltmgr.sys |
| IRQL | <= APC_LEVEL |
Voir aussi
FLT_PARAMETERS pour IRP_MJ_DEVICE_CONTROL et IRP_MJ_INTERNAL_DEVICE_CONTROL
FLT_PARAMETERS pour IRP_MJ_DIRECTORY_CONTROL
FLT_PARAMETERS pour IRP_MJ_FILE_SYSTEM_CONTROL
FLT_PARAMETERS pour IRP_MJ_QUERY_EA
FLT_PARAMETERS pour IRP_MJ_QUERY_QUOTA
FLT_PARAMETERS pour IRP_MJ_QUERY_SECURITY
FLT_PARAMETERS pour IRP_MJ_READ
FLT_PARAMETERS pour IRP_MJ_SET_EA
FLT_PARAMETERS pour IRP_MJ_SET_QUOTA