FsRtlCheckOplockEx, fonction (ntifs.h)
La routine FsRtlCheckOplockEx synchronise l’IRP pour une opération d’E/S de fichier avec l’état actuel du verrou opportuniste (oplock) du fichier.
Syntaxe
NTSTATUS FsRtlCheckOplockEx(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in] ULONG Flags,
[in, optional] PVOID Context,
[in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
[in, optional] POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
Paramètres
[in] Oplock
Pointeur de verrou opportuniste 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.
[in] Flags
Masque de bits pour l’opération d’E/S de fichier associée. Un système de fichiers ou un pilote de filtre définit des bits pour spécifier le comportement de FsRtlCheckOplockEx. Le paramètre indicateurs de
Valeur | Signification |
---|---|
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001) | Spécifie d’autoriser un saut de verrou opportuniste à continuer sans bloquer ou en attente l’opération qui a provoqué l’arrêt d’oplock. |
OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY (0x00000002) | Prise en charge à partir de Windows 7. Spécifie que FsRtlCheckOplockEx ne doit vérifier qu’une clé de verrou opportuniste sur l’FILE_OBJECT associée à l’IRP vers laquelle pointe le paramètre Irp. FsRtlCheckOplockEx devez ensuite ajouter la clé si celle-ci est fournie dans l’IRP. Aucun autre traitement oplock ne se produit ; c’est-à-dire qu’aucune coupure de verrou opportuniste ne se produira. |
OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK (0x00000004) | Prise en charge à partir de Windows 7. Spécifie que FsRtlCheckOplockEx doit rétablir tout état précédemment configuré via un appel à la routine FsRtlOplockFsctrl. FsRtlOplockFsctrl est appelée pendant le traitement d’une requête IRP_MJ_CREATE qui spécifie l’indicateur FILE_OPEN_REQUIRING_OPLOCK dans le paramètre d’options de création. L’indicateur OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK est généralement utilisé dans le traitement final d’une telle demande de création lorsqu’elle a échoué précédemment. |
OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008) | Prise en charge à partir de Windows 7. Spécifie d’autoriser tous les sauts de verrou opportunistes à continuer indépendamment de la clé de verrouillage opportuniste. |
OPLOCK_FLAG_PARENT_OBJECT (0x00000010) | Prise en charge à partir de Windows 8. Spécifie que Oplock est associé au parent (répertoire) du fichier ou du répertoire auquel l’IRP dans le paramètre Irp est dirigé. |
OPLOCK_FLAG_CLOSING_DELETE_ON_CLOSE (0x00000020) | Prise en charge à partir de Windows 8. Spécifie que l’opération d’E/S spécifiée dans Irp est un IRP_MJ_CLEANUP pour un handle qui a été ouvert à l’origine avec l’indicateur de FILE_DELETE_ON_CLOSE défini dans ses options de création. Cet indicateur n’a aucun effet si Irp n’est pas une opération de IRP_MJ_CLEANUP. La spécification de cet indicateur peut entraîner un arrêt de verrouillage opportuniste. |
OPLOCK_FLAG_REMOVING_FILE_OR_LINK (0x00000040) | Prise en charge à partir de Windows 8. Spécifie la gestion d’un saut de verrou opportuniste sur un répertoire parent lors de la suppression d’un fichier ou d’un lien dans ce répertoire. S’il est spécifié, cet indicateur doit être combiné à OPLOCK_FLAG_PARENT_OBJECT. Cet indicateur doit être spécifié lorsque le système de fichiers traite une opération qui entraîne la suppression d’un lien ou d’un fichier. |
[in, optional] Context
Pointeur vers lequel les informations de contexte définies par l’appelant doivent être transmises aux routines de rappel vers utilisant les paramètres CompletionRoutine et PostIrpRoutine point.
[in, optional] CompletionRoutine
Pointeur vers une routine de rappel fournie par l’appelant. Si un saut de verrou opportuniste est en cours, cette routine est appelée lorsque l’arrêt est terminé. Ce paramètre est facultatif et peut être NULL. S’il s’agit de NULL, l’appelant est placé dans un état d’attente jusqu’à ce que le saut de verrou opportuniste soit terminé.
Cette routine est déclarée comme suit :
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
IN PVOID Context,
IN PIRP Irp
);
Cette routine a les paramètres suivants :
Paramètre | Description |
---|---|
Contexte | Pointeur d’informations de contexte transmis dans le paramètre Context |
Irp | Pointeur vers l’IRP pour l’opération d’E/S. |
[in, optional] PostIrpRoutine
Pointeur vers une routine de rappel fournie par l’appelant à appeler si l’opération d’E/S est publiée dans une file d’attente de travail. Ce paramètre est facultatif et peut être NULL.
Cette routine est déclarée comme suit :
typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
IN PVOID Context,
IN PIRP Irp
);
Cette routine a les paramètres suivants :
Paramètre | Description |
---|---|
Contexte | Pointeur d’informations de contexte transmis dans le paramètre Context |
Irp | Pointeur vers l’IRP pour l’opération d’E/S. |
Valeur de retour
FsRtlCheckOplockEx retourne STATUS_SUCCESS ou un code NTSTATUS approprié, tel que l’un des éléments suivants :
Retourner le code | Description |
---|---|
STATUS_CANCELLED | L’IRP a été annulé. STATUS_CANCELLED est un code d’erreur. |
STATUS_CANNOT_BREAK_OPLOCK | Impossible d’accomplir l’arrêt du verrou opportuniste (oplock). L’IRP est une demande de IRP_MJ_CREATE. FILE_OPEN_REQUIRING_OPLOCK a été spécifié dans le paramètre d’options de création pour l’opération, et il existe un oplock accordé. |
STATUS_OPLOCK_BREAK_IN_PROGRESS | Une rupture de verrou opportuniste est en cours. L’IRP est une requête IRP_MJ_CREATE et FILE_COMPLETE_IF_OPLOCKED a été spécifié dans le paramètre d’options de création pour l’opération. STATUS_OPLOCK_BREAK_IN_PROGRESS est un code de réussite retourné si OPLOCK_FLAG_COMPLETE_IF_OPLOCKED a été défini et qu’un verrou opportuniste a été rompu. |
STATUS_PENDING | Un saut de verrou opportuniste a été lancé et le contrôle de l’IRP a été passé au package oplock. Si CompletionRoutine a la valeur NULL, cette routine bloque pendant le traitement du saut d’oplock, au lieu de retourner STATUS_PENDING. STATUS_PENDING est un code de réussite. |
Remarques
FsRtlCheckOplockEx synchronise l’IRP pour une opération d’E/S avec l’état de verrouillage opportuniste actuel d’un fichier en fonction des conditions suivantes :
Si l’opération d’E/S provoque l’arrêt opportuniste, le saut de verrou opportuniste est lancé.
Si l’opération d’E/S ne peut pas continuer tant que le saut de verrou opportuniste n’est pas terminé et qu’une routine d’achèvement dans completionRoutine a été spécifiée, FsRtlCheckOplockEx retourne STATUS_PENDING et appelle la routine de rappel spécifiée dans PostIrpRoutine. Lorsque le saut de verrou opportuniste a été reconnu, la routine de rappel dans CompletionRoutine est appelée.
Si l’opération d’E/S ne peut pas continuer tant que le saut de verrou opportuniste n’est pas terminé et que completionRoutine n’a pas été spécifié, FsRtlCheckOplockEx ne retournera pas tant que le saut de verrou opportuniste n’est pas reconnu.
Une PostIrpRoutine doit être spécifiée uniquement si un CompletionRoutine a été spécifié.
Si un système de fichiers ou un pilote de filtre utilise des verrous opportunistes, il doit appeler FsRtlCheckOplockEx à partir de toutes les routines de distribution pour les opérations d’E/S qui peuvent provoquer des sauts de verrou opportunistes. Cette règle s’applique aux types d’opérations d’E/S suivants, car ces opérations peuvent entraîner des sauts de verrou opportunistes :
- IRP_MJ_CLEANUP
- IRP_MJ_CREATE
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_READ
- IRP_MJ_SET_INFORMATION
- IRP_MJ_WRITE
Pour plus d’informations sur les verrous opportunistes, consultez la documentation du Kit de développement logiciel (SDK) Microsoft Windows.
Les minifilters doivent appeler FltCheckOplockEx au lieu de FsRtlCheckOplockEx.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows Vista |
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