FsRtlCheckUpperOplock, fonction (ntifs.h)

La routine FsRtlCheckUpperOplock fournit un verrouillage opportuniste (oplock) qui vérifie les systèmes de fichiers secondaires ou superposés lorsque les verrous oplocks qu’ils contiennent changent d’état. Les systèmes de fichiers secondaires, tels que les redirecteurs réseau et les services de fichiers clustering, appellent FsRtlCheckUpperOplock lorsqu’un oplock contenu dans un système de fichiers inférieur par le système de fichiers secondaire change d’état. Un changement d’état peut se produire par un arrêt ou une mise à niveau. FsRtlCheckUpperOplock interrompt l’oplock du système de fichiers supérieur, si nécessaire, pour confirmer le nouvel état de verrouillage d’opération inférieur. L’appelant peut également fournir des rappels facultatifs pour les notifications d’accusé de réception d’arrêt et de status 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 le verrou d’opération 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 oplock Read (R).
OPLOCK_LEVEL_CACHE_WRITE Indique un type d’écriture oplock (W).
OPLOCK_LEVEL_CACHE_HANDLE Indique un type de handle oplock (H).

[in, optional] CompletionRoutineContext

Pointeur vers les informations de contexte définies par l’appelant à passer aux routines de rappel vers laquelle pointent les paramètres CompletionRoutine et PrePendIrpRoutine .

[in, optional] CompletionRoutine

Pointeur vers une routine de rappel fournie par l’appelant. Si un 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 a la valeur NULL, l’appelant est mis en état d’attente jusqu’à ce que le verrou opportuniste soit terminé.

Les descriptions de la déclaration 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 qui a été passé dans le paramètre CompletionRoutineContext à FsRtlCheckUpperOplock.
Irp Pointeur facultatif vers l’IRP pour l’opération d’E/S. FsRtlCheckUpperOplock définit 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 de la déclaration 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 qui a été passé dans le paramètre CompletionRoutineContext à FsRtlCheckUpperOplock.
Irp Pointeur facultatif vers l’IRP pour l’opération d’E/S. FsRtlCheckUpperOplock définit 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 Flags a 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 arrêt de blocage d’opération.
OPLOCK_UPPER_FLAG_NOTIFY_REFRESH_READ (0x00020000) Arrêtez uniquement les verrous supérieurs en lecture (R) et informez les détenteurs R qu’ils peuvent à nouveau demander R. Toutes les autres vérifications oplock supérieures retournent STATUS_CANNOT_BREAK_OPLOCK.

Valeur retournée

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

Code de retour Description
STATUS_SUCCESS Un blocage d’opération n’est pas nécessaire ou l’arrêt a été reconnu. Si CompletionRoutine a la valeur NULL, FsRtlCheckUpperOplock se bloque pendant le traitement de l’arrêt du blocage d’opération au lieu de retourner STATUS_PENDING.
STATUS_CANNOT_BREAK_OPLOCK Impossible d’effectuer l’arrêt du blocage d’opération. Consultez Indicateurs pour connaître les conditions qui limitent une pause.
STATUS_PENDING Un verrou opportuniste est en cours. S’il est fourni, PrePendIrpRoutine est appelé en tant que notification de l’opération en attente. CompletionRoutine est appelé lorsque l’arrêt du blocage d’opération est terminé. STATUS_PENDING est un code de réussite.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8.1
Plateforme cible Universal
En-tête ntifs.h (include Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL

Voir aussi

FsRtlCheckOplockEx

FsRtlUpperOplockFsctrl