Partager via


FsRtlCheckUpperOplock, fonction (ntifs.h)

La routine FsRtlCheckUpperOplock fournit une vérification de verrou opportuniste (oplock) dans les systèmes de fichiers secondaires ou en couches lorsque les oplocks qu’ils contiennent contiennent l’état de modification. Les systèmes de fichiers secondaires, tels que les redirecteurs réseau et les services de fichiers de clustering, appellent FsRtlCheckUpperOplock lorsqu’un oplock conservé dans un système de fichiers inférieur par le système de fichiers secondaire change d’état. Une modification d’état peut se produire par un arrêt ou une mise à niveau. FsRtlCheckUpperOplock brisera l’oplock du système de fichiers supérieur, si nécessaire, pour confirmer le nouvel état d’oplock inférieur. L’appelant peut également fournir des rappels facultatifs pour les notifications d’accusé de réception d’arrêt et l’état en attente.

Syntaxe

NTSTATUS FsRtlCheckUpperOplock(
  [in]           POPLOCK                       Oplock,
  [in]           ULONG                         NewLowerOplockState,
  [in, optional] PVOID                         CompletionRoutineContext,
  [in, optional] POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
                 POPLOCK_FS_PREPOST_IRP        PrePendRoutine,
  [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] NewLowerOplockState

Valeur représentant l’oplock demandé conservé dans un système de fichiers inférieur par un système de fichiers secondaire. Il s’agit d’une combinaison OR au niveau du bit des éléments suivants :

Valeur Signification
OPLOCK_LEVEL_CACHE_READ Indique un type de lecture oplock (R).
OPLOCK_LEVEL_CACHE_WRITE Indique un type d’écriture oplock (W).
OPLOCK_LEVEL_CACHE_HANDLE Indique un type de handle d’oplock (H).

[in, optional] CompletionRoutineContext

Pointeur vers lequel les informations de contexte définies par l’appelant doivent être transmises aux routines de rappel auxquelles pointent les paramètres CompletionRoutine et PrePendIrpRou tine.

[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é.

Les descriptions des déclarations et des paramètres de cette routine sont les suivantes :

typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE) (
      _In_ PVOID Context,
      _In_opt_ PIRP Irp
      );
Paramètre Description
contexte Pointeur d’informations de contexte transmis dans le paramètre CompletionRoutineContext à FsRtlCheckUpperOplock.
Irp Pointeur facultatif vers l’IRP pour l’opération d’E/S. FsRtlCheckUpperOplock définissez toujours cette valeur sur NULL.

PrePendRoutine

Pointeur vers une routine de rappel fournie par l’appelant à appeler si FsRtlCheckUpperOplock retourne STATUS_PENDING. Ce paramètre est facultatif et peut être NULL.

Les descriptions des déclarations et des paramètres de cette routine sont les suivantes :

typedef VOID
(*POPLOCK_FS_PREPOST_IRP) (
      _In_ PVOID Context,
      _in_opt_ PIRP Irp
      );
Paramètre Description
contexte Pointeur d’informations de contexte transmis dans le paramètre CompletionRoutineContext à FsRtlCheckUpperOplock.
Irp Pointeur facultatif vers l’IRP pour l’opération d’E/S. FsRtlCheckUpperOplock définissez toujours cette valeur sur NULL.

[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 FsRtlCheckUpperOplock. Le paramètre indicateurs de contient les options suivantes :

Valeur Signification
OPLOCK_UPPER_FLAG_CHECK_NO_BREAK (0x00010000) Retourne STATUS_CANNOT_BREAK_OPLOCK si la valeur de NewLowerOplockState entraîne un saut d’oplock.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Arrêtez uniquement les verrous supérieurs en lecture (R) et informez les titulaires R qu’ils peuvent à nouveau demander R. Tous les autres contrôles d’oplock supérieur qu’il retourne STATUS_CANNOT_BREAK_OPLOCK.

Valeur de retour

FsRtlCheckUpperOplock retourne un code NTSTATUS approprié, tel que l’un des éléments suivants :

Retourner le code Description
STATUS_SUCCESS Un saut d’oplock n’est pas obligatoire ou l’arrêt a été reconnu. Si CompletionRoutine a la valeur NULL, FsRtlCheckUpperOplock blocs pendant que le saut d’oplock est traité plutôt que de retourner STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK Impossible d’accomplir le saut d’oplock. Consultez indicateurs pour connaître les conditions qui limitent un saut.
STATUS_PENDING Une rupture de verrou opportuniste est en cours. Si elle est fournie, PrePendIrpRoutine est appelée comme notification de l’opération en attente. CompletionRoutine est appelée lorsque le saut d’oplock est terminé. STATUS_PENDING est un code de réussite.

Exigences

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

Voir aussi

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl