FsRtlCheckOplock, fonction (ntifs.h)
La routine FsRtlCheckOplock synchronise l’IRP pour une opération d’E/S de fichier avec l’état actuel du verrouillage 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 les informations de contexte définies par l’appelant à passer aux routines de rappel vers laquelle pointent les paramètres CompletionRoutine et PostIrpRoutine .
[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é.
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 |
---|---|
Context | Pointeur d’informations de contexte qui a été passé 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 |
---|---|
Context | Pointeur d’informations de contexte qui a été passé dans le paramètre Context à FsRtlCheckOplock. |
Irp | Pointeur vers l’IRP pour l’opération d’E/S. |
Valeur retournée
La routine FsRtlCheckOplock retourne STATUS_SUCCESS ou un code NTSTATUS approprié tel que l’un des éléments suivants :
Code de retour | Description |
---|---|
STATUS_CANCELLED | L’IRP a été annulé. STATUS_CANCELLED est un code d’erreur. |
STATUS_CANNOT_BREAK_OPLOCK | Si l’IRP est un IRP_MJ_CREATE et que FILE_OPEN_REQUIRING_OPLOCK se trouve dans les CreateOptions de l’IRP, la routine n’initie pas la rupture d’un verrou opportuniste existant, mais échoue avec STATUS_CANNOT_BREAK_OPLOCK. |
STATUS_OPLOCK_BREAK_IN_PROGRESS | Un 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 create options pour l’opération. STATUS_OPLOCK_BREAK_IN_PROGRESS est un code de réussite. |
STATUS_PENDING | Une rupture de verrou opportuniste a été lancée et le contrôle de l’IRP a été passé au package oplock. Si CompletionRoutine a la valeur NULL, cette routine se bloque pendant le traitement de l’arrêt du blocage d’opération, 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 selon les conditions suivantes :
Si l’opération d’E/S entraîne l’arrêt du verrou opportuniste, l’arrêt de verrouillage opportuniste est lancé.
Si l’opération d’E/S ne peut pas continuer tant que le verrou opportuniste n’est pas terminé, FsRtlCheckOplock retourne STATUS_PENDING et appelle la routine de rappel vers laquelle pointe le paramètre PostIrpRoutine .
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 distribution pour les opérations d’E/S qui peuvent provoquer des interruptions de verrouillage opportunistes. Cette règle s’applique aux types d’opérations d’E/S suivants, car ces opérations peuvent provoquer des blocages 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 minifiltres doivent appeler FltCheckOplock au lieu de FsRtlCheckOplock.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 |
Plateforme cible | Universal |
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