Fonction FltOplockBreakH (fltkernel.h)
La routine FltOplockBreakH interrompt CACHE_HANDLE_LEVEL verrous opportunistes (oplocks).
Syntaxe
FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakH(
[in] POPLOCK Oplock,
[in] PFLT_CALLBACK_DATA CallbackData,
[in] ULONG Flags,
[in, optional] PVOID Context,
[in, optional] PFLTOPLOCK_WAIT_COMPLETE_ROUTINE WaitCompletionRoutine,
[in, optional] PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE PrePostCallbackDataRoutine
);
Paramètres
[in] Oplock
Pointeur oplock opaque pour le fichier. Ce pointeur doit avoir été initialisé par un appel précédent à FltInitializeOplock.
[in] CallbackData
Pointeur vers la structure de données de rappel (FLT_CALLBACK_DATA) pour l’opération d’E/S.
[in] Flags
Masque de bits pour l’opération d’E/S de fichier associée. Un pilote de minifiltre définit des bits pour spécifier le comportement de FltOplockBreakH. Le paramètre Flags comporte les options suivantes :
OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)
Permet à un arrêt oplock de se poursuivre sans bloquer ou attendre l’opération qui a provoqué l’arrêt de l’oplock.
OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)
Permet CACHE_HANDLE_LEVEL sauts 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 WaitCompletionRoutine et PrePostCallbackDataRoutine .
[in, optional] WaitCompletionRoutine
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
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
__in PFLT_CALLBACK_DATA CallbackData,
__in_opt PVOID Context
);
Cette routine a les paramètres suivants :
CallbackData
Pointeur vers la structure de données de rappel pour l’opération d’E/S.
Context
Pointeur d’informations de contexte qui a été passé dans le paramètre Context à FltOplockBreakH.
[in, optional] PrePostCallbackDataRoutine
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
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
__in PFLT_CALLBACK_DATA CallbackData,
__in_opt PVOID Context
);
Cette routine a les paramètres suivants :
CallbackData
Pointeur vers la structure de données de rappel pour l’opération d’E/S.
Context
Pointeur d’informations de contexte qui a été passé dans le paramètre Context à FltOplockBreakH.
Valeur retournée
FltOplockBreakH retourne l’un des codes FLT_PREOP_CALLBACK_STATUS suivants :
Code de retour | Description |
---|---|
|
FltOplockBreakH a rencontré un échec d’allocation de pool ou un appel à la fonction FsRtlOplockBreakH a renvoyé une erreur. FltOplockBreakH définit le code d’erreur dans le membre Status de la structure IO_STATUS_BLOCK . La structure IO_STATUS_BLOCK est spécifiée dans le membre IoStatus de la structure de données de rappel FLT_CALLBACK_DATA. Le paramètre CallbackData pointe vers cette FLT_CALLBACK_DATA. |
|
Un arrêt d’opération a été lancé, ce qui a entraîné la publication de l’opération d’E/S dans une file d’attente de travail par le Gestionnaire de filtres. L’opération d’E/S est représentée par les données de rappel auxquelles pointe le paramètre CallbackData . |
|
Les données de rappel auxquelles pointe le paramètre CallbackData n’ont pas été interrompues et l’opération d’E/S a été effectuée immédiatement. N’oubliez pas que si l’appelant a spécifié OPLOCK_FLAG_COMPLETE_IF_OPLOCKED dans le paramètre Flags , un arrêt d’opération peut être en cours même si l’opération d’E/S n’a pas été suspendu. Pour déterminer s’il s’agit de la situation, l’appelant doit case activée pour STATUS_OPLOCK_BREAK_IN_PROGRESS dans le membre Status de la structure IO_STATUS_BLOCK. La structure IO_STATUS_BLOCK est spécifiée dans le membre IoStatus de la structure de données de rappel FLT_CALLBACK_DATA. |
Remarques
Pour plus d’informations sur les verrous opportunistes, consultez la documentation Microsoft Windows SDK.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | La routine FltOplockBreakH est disponible à partir de Windows 7. |
Plateforme cible | Universal |
En-tête | fltkernel.h (inclure Fltkernel.h) |
Bibliothèque | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |