Partager via


FsRtlCheckOplock, fonction (ntifs.h)

La routine FsRtlCheckOplock synchronise l’IRP d’une opération d’E/S de fichier avec l’état actuel du verrou opportuniste (oplock) du fichier.

Syntaxe

NTSTATUS FsRtlCheckOplock(
  [in]           POPLOCK                       Oplock,
  [in]           PIRP                          Irp,
  [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, 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 à FsRtlCheckOplock.
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 à FsRtlCheckOplock.
Irp Pointeur vers l’IRP pour l’opération d’E/S.

Valeur de retour

La routine FsRtlCheckOplock 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 Si l’IRP est une IRP_MJ_CREATE et que FILE_OPEN_REQUIRING_OPLOCK se trouve dans createOptions de l’IRP, la routine ne lance pas une rupture d’un verrou opportuniste existant, mais échoue avec STATUS_CANNOT_BREAK_OPLOCK.
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.
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

FsRtlCheckOplock 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é, FsRtlCheckOplock retourne STATUS_PENDING et appelle la routine de rappel vers laquelle pointe le paramètre PostIrpRou tine.

Si un système de fichiers ou un pilote de filtre utilise des verrous opportunistes, il doit appeler FsRtlCheckOplock à partir de toutes les routines de répartition 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) Windows.

Les minifilters doivent appeler FltCheckOplock au lieu de FsRtlCheckOplock.

Exigences

Exigence Valeur
client minimum pris en charge Windows 2000
plateforme cible Universel
d’en-tête ntifs.h (include FltKernel.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Voir aussi

FSCTL_OPBATCH_ACK_CLOSE_PENDING

FSCTL_OPLOCK_BREAK_ACKNOWLEDGE

FSCTL_OPLOCK_BREAK_ACK_NO_2

FSCTL_OPLOCK_BREAK_NOTIFY

FSCTL_REQUEST_BATCH_OPLOCK

FSCTL_REQUEST_FILTER_OPLOCK

FSCTL_REQUEST_OPLOCK_LEVEL_1

FSCTL_REQUEST_OPLOCK_LEVEL_2

FltCheckOplock

FsRtlCurrentBatchOplock

FsRtlInitializeOplock

FsRtlOplockFsctrl

FsRtlOplockIsFastIoPossible

FsRtlUninitializeOplock