Freigeben über


FltOplockBreakH-Funktion (fltkernel.h)

Die FltOplockBreakH Routine bricht CACHE_HANDLE_LEVEL opportunistische Sperren (Oplocks).

Syntax

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
);

Parameter

[in] Oplock

Ein undurchsichtiger Oplockzeiger für die Datei. Dieser Zeiger muss durch einen vorherigen Aufruf von FltInitializeOplock-initialisiert worden sein.

[in] CallbackData

Ein Zeiger auf die Rückrufdatenstruktur (FLT_CALLBACK_DATA) für den E/A-Vorgang.

[in] Flags

Eine Bitmaske für den zugeordneten Datei-E/A-Vorgang. Ein Minifiltertreiber legt Bits fest, um das Verhalten von FltOplockBreakHanzugeben. Der parameter Flags verfügt über die folgenden Optionen:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Ermöglicht es einem Oplock-Unterbrechung, den Vorgang fortzusetzen, ohne den Vorgang zu blockieren oder ausstehend, der den Oplock-Unterbrechung verursacht hat.

OPLOCK_FLAG_IGNORE_OPLOCK_KEYS (0x00000008)

Ermöglicht CACHE_HANDLE_LEVEL Oplock-Unterbrechungen unabhängig von der Oplock-Taste fortzufahren.

[in, optional] Context

Ein Zeiger zum Aufrufen definierter Kontextinformationen, die an die Rückrufroutinen übergeben werden sollen, auf die die WaitCompletionRoutine und PrePostCallbackDataRoutine Parameter verweisen.

[in, optional] WaitCompletionRoutine

Ein Zeiger auf eine vom Aufrufer bereitgestellte Rückrufroutine. Wenn eine Oplockunterbrechung ausgeführt wird, wird diese Routine aufgerufen, wenn die Unterbrechung abgeschlossen ist. Dieser Parameter ist optional und kann NULL-werden. Wenn es NULL-ist, wird der Aufrufer in einen Wartezustand versetzt, bis der Oplock-Umbruch abgeschlossen ist.

Diese Routine wird wie folgt deklariert:

typedef VOID
(*PFLTOPLOCK_WAIT_COMPLETE_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
    );

Diese Routine hat die folgenden Parameter:

CallbackData

Ein Zeiger auf die Rückrufdatenstruktur für den E/A-Vorgang.

Zusammenhang

Ein Kontextinformationspunkt, der im parameter Context an FltOplockBreakHübergeben wurde.

[in, optional] PrePostCallbackDataRoutine

Ein Zeiger auf eine vom Aufrufer bereitgestellte Rückrufroutine, die aufgerufen werden soll, wenn der E/A-Vorgang eingestiftet werden muss. Die Routine wird aufgerufen, bevor das Oplock-Paket die IRP übergibt. Dieser Parameter ist optional und kann NULL-werden.

Diese Routine wird wie folgt deklariert:

typedef VOID
(*PFLTOPLOCK_PREPOST_CALLBACKDATA_ROUTINE) (
    __in PFLT_CALLBACK_DATA CallbackData,
 __in_opt PVOID Context
      );

Diese Routine hat die folgenden Parameter:

CallbackData

Ein Zeiger auf die Rückrufdatenstruktur für den E/A-Vorgang.

Zusammenhang

Ein Kontextinformationspunkt, der im parameter Context an FltOplockBreakHübergeben wurde.

Rückgabewert

FltOplockBreakH gibt einen der folgenden FLT_PREOP_CALLBACK_STATUS Codes zurück:

Rückgabecode Beschreibung
FLT_PREOP_COMPLETE
FltOplockBreakH ein Poolzuordnungsfehler aufgetreten ist, oder ein Aufruf der FsRtlOplockBreakH Funktion hat einen Fehler zurückgegeben. FltOplockBreakH- legt den Fehlercode im Status Member der IO_STATUS_BLOCK Struktur fest. Die IO_STATUS_BLOCK Struktur wird im IoStatus- Member der FLT_CALLBACK_DATA Rückrufdatenstruktur angegeben. Der parameter CallbackData verweist auf diesen FLT_CALLBACK_DATA.
FLT_PREOP_PENDING
Es wurde eine Oplockunterbrechung initiiert, was dazu führte, dass der Filter-Manager den E/A-Vorgang in eine Arbeitswarteschlange einfügte. Der E/A-Vorgang wird durch die Rückrufdaten dargestellt, auf die der CallbackData Parameter verweist.
FLT_PREOP_SUCCESS_WITH_CALLBACK
Die Rückrufdaten, auf die der CallbackData Parameter verweist, wurde nicht mit Stift versehen, und der E/A-Vorgang wurde sofort ausgeführt. Beachten Sie folgendes: Wenn der Aufrufer OPLOCK_FLAG_COMPLETE_IF_OPLOCKED im parameter Flags angegeben hat, wird möglicherweise ein Oplock-Umbruch ausgeführt, obwohl der E/A-Vorgang nicht durchgestiftet wurde. Um festzustellen, ob dies die Situation ist, sollte der Aufrufer im Status- Mitglied der IO_STATUS_BLOCK-Struktur nach STATUS_OPLOCK_BREAK_IN_PROGRESS suchen. Die IO_STATUS_BLOCK Struktur wird im IoStatus- Member der FLT_CALLBACK_DATA Rückrufdatenstruktur angegeben.

Bemerkungen

Weitere Informationen zu opportunistischen Sperren finden Sie in der Microsoft Windows SDK-Dokumentation.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Die FltOplockBreakH-Routine ist ab Windows 7 verfügbar.
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library FltMgr.lib
DLL- Fltmgr.sys
IRQL- <= APC_LEVEL

Siehe auch

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakH

IO_STATUS_BLOCK