FsRtlOplockFsctrlEx, fonction (ntifs.h)
La routine FsRtlOplockFsctrlEx effectue diverses opérations de verrouillage opportuniste (oplock) au nom d’un système de fichiers ou d’un pilote de filtre.
Syntaxe
NTSTATUS FsRtlOplockFsctrlEx(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in] ULONG OpenCount,
[in] ULONG Flags
);
Paramètres
[in] Oplock
Pointeur oplock opaque pour le fichier. Ce pointeur doit avoir été initialisé par un appel précédent à FsRtlInitializeOplock.
[in] Irp
Pointeur vers l’IRP pour l’opération d’E/S. Ce paramètre est obligatoire et ne peut pas être NULL.
[in] OpenCount
Nombre de handles utilisateur pour le fichier, si un oplock exclusif est demandé. La définition d’une valeur différente de zéro pour une requête oplock de niveau 2, R ou RH indique qu’il existe des verrous de plage d’octets sur le fichier. Pour plus d’informations sur les types oplock, consultez Vue d’ensemble d’Oplock.
[in] Flags
Masque de bits pour les opérations oplock associées. Un système de fichiers ou un pilote de filtre définit des bits pour spécifier le comportement de FsRtlOplockFsctrlEx. Ce paramètre a les options suivantes :
Drapeau | Signification |
---|---|
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) | Le système de fichiers a vérifié que toutes les clés oplock sur les handles actuellement ouverts correspondent. En spécifiant cet indicateur, vous autorisez le package oplock à accorder un oplock de niveau RW ou RWH lorsque plusieurs handles ouverts existent sur le fichier. Pour plus d’informations sur les types oplock, consultez Vue d’ensemble d’Oplock. |
Valeur de retour
FsRtlOplockFsctrlEx retourne l’une des valeurs NTSTATUS suivantes :
Retourner le code | Description |
---|---|
STATUS_SUCCESS | Pour une demande de IRP_MJ_CREATE, STATUS_SUCCESS indique que l’oplock de filtre demandé a été accordé. Pour une opération FSCTL, la signification de STATUS_SUCCESS dépend du code FSCTL. Pour plus d’informations, consultez les pages de référence des codes FSCTL répertoriés dans la section Remarques suivantes. |
STATUS_CANCELLED | L’opération d’E/S a été annulée. STATUS_CANCELLED est un code d’erreur. |
STATUS_INVALID_PARAMETER | Le code FSCTL pour l’opération d’E/S n’était pas l’une des valeurs valides répertoriées dans la section Remarques suivante. STATUS_INVALID_PARAMETER est un code d’erreur. |
STATUS_OPLOCK_NOT_GRANTED | L’oplock n’a pas pu être accordé. STATUS_OPLOCK_NOT_GRANTED est un code d’erreur. |
STATUS_PENDING | Utilisé uniquement pour les opérations FSCTL. La signification de STATUS_PENDING dépend du code FSCTL. Pour plus d’informations, consultez les pages de référence des codes FSCTL répertoriés dans la section Remarques suivantes. STATUS_PENDING est un code de réussite. |
STATUS_CANNOT_BREAK_OPLOCK | Un nouvel oplock n’a pas pu être accordé. L’IRP est une requête IRP_MJ_CREATE et FILE_OPEN_REQUIRING_OPLOCK a été spécifié dans le paramètre d’options de création pour l’opération. STATUS_CANNOT_BREAK_OPLOCK est un code de réussite. |
Remarques
Les systèmes de fichiers et les pilotes de filtre hérités appellent FsRtlOplockFsctrlEx pour effectuer différentes opérations d’oplock pour une opération d’E/S de contrôle de système de fichiers ou de création. Les minifilters doivent appeler FltOplockFsctrlEx au lieu de FsRtlOplockFsctrlEx.
L’IRP pointé par le paramètre Irp
Si l’IRP est une requête IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrlEx pouvez être utilisé avec l’un des codes FSCTL suivants, qui est défini dans IrpSp->Parameters.FileSystemControl.FsControlCode:
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
- FSCTL_REQUEST_OPLOCK
Pour plus d’informations sur ces FSCTL et sur les verrous opportunistes en général, consultez la documentation du Kit de développement logiciel (SDK) Microsoft Windows.
Si l’IRP est une requête IRP_MJ_CREATE, FsRtlOplockFsctrlEx pouvez être utilisé pour demander un oplock de filtre en attente si toutes les conditions suivantes sont remplies :
- La valeur du paramètre OpenCount doit être 1.
- La valeur du paramètre DesiredAccess
de la demande de IRP_MJ_CREATE doit être FILE_READ_ATTRIBUTES. - La valeur du paramètre ShareAccess
pour la demande de IRP_MJ_CREATE doit être FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.
Si la demande d’oplock de filtre en attente est accordée, FsRtlOplockFsctrlEx retourne STATUS_SUCCESS. Pour plus d’informations sur la création de paramètres, consultez l’entrée de référence pour IRP_MJ_CREATE.
Les filtres et les systèmes de fichiers qui appellent cette fonction doivent synchroniser les appels dans le package oplock fourni par le système. Pour plus d’informations, consultez de synchronisation Oplock.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | La routine FsRtlOplockFsctrlEx est disponible à partir de Windows 7. |
plateforme cible | Universel |
d’en-tête | ntifs.h (include Ntifs.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Voir aussi
FSCTL_OPBATCH_ACK_CLOSE_PENDING