Fonction FsRtlOplockBreakH (ntifs.h)
La routine FsRtlOplockBreakH interrompt CACHE_HANDLE_LEVEL verrous opportunistes (oplocks).
Syntaxe
NTSTATUS FsRtlOplockBreakH(
[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 FsRtlOplockBreakH. Le paramètre Flags comporte les options suivantes :
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)
Spécifie pour permettre à un arrêt oplock de se poursuivre sans bloquer ou en attendant l’opération qui a provoqué l’arrêt de l’oplock.
OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)
Pris en charge dans Windows 7 et versions ultérieures.
Spécifie pour permettre à CACHE_HANDLE_LEVEL sauts d’oplock de continuer, quelle que soit la touche oplock.
[in, optional] Context
Pointeur vers les informations de contexte définies par l’appelant à passer aux routines de rappel auxquelles pointent les paramètres CompletionRoutine et PostIrpRoutine .
[in, optional] CompletionRoutine
Pointeur vers une routine de rappel fournie par l’appelant. Si un arrêt d’opération 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 est NULL, l’appelant est placé dans un état d’attente jusqu’à ce que l’arrêt d’opération 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 :
Context
Pointeur d’informations de contexte qui a été passé dans le paramètre Context à FsRtlOplockBreakH.
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 doit être suspendu. La routine est appelée avant que le package oplock n’arrête l’IRP. 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
);
Context
Pointeur d’informations de contexte qui a été passé dans le paramètre Context à FsRtlOplockBreakH.
Irp
Pointeur vers l’IRP pour l’opération d’E/S.
Valeur retournée
FsRtlOplockBreakH retourne STATUS_SUCCESS ou un code NTSTATUS approprié, comme l’un des éléments suivants :
Code de retour | Description |
---|---|
|
L’IRP a été annulé. STATUS_CANCELLED est un code d’erreur. |
|
L’IRP a été publié dans une file d’attente de travail. STATUS_PENDING est un code de réussite. |
|
L’arrêt de verrou opportuniste (oplock) ne peut pas être effectué. L’IRP est une requête IRP_MJ_CREATE. FILE_OPEN_REQUIRING_OPLOCK a été spécifié dans le paramètre create options pour l’opération, et un oplock est accordé. STATUS_CANNOT_BREAK_OPLOCK est un code d’erreur. |
Remarques
Lorsqu’une opération doit interrompre CACHE_HANDLE_LEVEL oplocks, l’opération appelle FsRtlOplockBreakH.
Si l’appelant spécifie l’indicateur OPLOCK_FLAG_IGNORE_OPLOCK_KEYS dans le paramètre Flags , FsRtlOplockBreakH interrompt tous les CACHE_HANDLE_LEVEL oplocks, quelle que soit la touche oplock. Le comportement par défaut de FsRtlOplockBreakH consiste à arrêter les verrous oplock dont les clés ne correspondent pas à la clé de l’objet de fichier de l’appelant.
Les minifiltres doivent appeler FltOplockBreakH au lieu de FsRtlOplockBreakH.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | La routine FsRtlOplockBreakH est disponible à partir de Windows 7. |
Plateforme cible | Universal |
En-tête | ntifs.h (inclure Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |