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 |