Fonction FsRtlOplockFsctrlEx (ntifs.h)
La routine FsRtlOplockFsctrlEx effectue diverses opérations de verrouillage opportuniste (oplock) pour le compte 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 demande de verrouillage 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 :
Indicateur | Signification |
---|---|
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) | Le système de fichiers a vérifié que toutes les clés oplock sur les descripteurs actuellement ouverts correspondent. En spécifiant cet indicateur, vous autorisez le package oplock à accorder un oplock de niveau RW ou RWH lorsqu’il existe plusieurs handles ouverts au fichier. Pour plus d’informations sur les types oplock, consultez Vue d’ensemble d’Oplock. |
Valeur retournée
FsRtlOplockFsctrlEx retourne l’une des valeurs NTSTATUS suivantes :
Code de retour | Description |
---|---|
STATUS_SUCCESS | Pour une demande de IRP_MJ_CREATE, STATUS_SUCCESS indique que le verrouillage 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 pour les codes FSCTL répertoriés dans la section Notes suivante. |
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 de 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 pour les codes FSCTL répertoriés dans la section Notes suivante. STATUS_PENDING est un code de réussite. |
STATUS_CANNOT_BREAK_OPLOCK | Impossible d’accorder un nouveau verrou d’opération. L’IRP est une requête IRP_MJ_CREATE et FILE_OPEN_REQUIRING_OPLOCK a été spécifié dans le paramètre create options 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 diverses opérations de verrouillage d’opération pour une opération d’E/S de création ou de contrôle du système de fichiers. Les minifilters doivent appeler FltOplockFsctrlEx au lieu de FsRtlOplockFsctrlEx.
L’IRP pointé vers par le paramètre Irp doit être un IRP valide pour une opération IRP_MJ_FILE_SYSTEM_CONTROL ou IRP_MJ_CREATE .
Si l’IRP est une requête IRP_MJ_FILE_SYSTEM_CONTROL, FsRtlOplockFsctrlEx peut ê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 Microsoft Windows SDK.
Si l’IRP est une requête IRP_MJ_CREATE, FsRtlOplockFsctrlEx peut ê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 pour la requête IRP_MJ_CREATE doit être FILE_READ_ATTRIBUTES.
- La valeur du paramètre ShareAccess pour la demande IRP_MJ_CREATE doit être FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.
Si la demande d’un 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 Synchronisation oplock .
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | La routine FsRtlOplockFsctrlEx est disponible à partir de Windows 7. |
Plateforme cible | Universal |
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