Funzione FltOplockBreakToNoneEx (fltkernel.h)

La routine FltOplockBreakToNoneEx interrompe immediatamente tutti i blocchi opportunistici (oplock) senza considerare alcuna chiave di oplock.

Sintassi

FLT_PREOP_CALLBACK_STATUS FLTAPI FltOplockBreakToNoneEx(
  [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
);

Parametri

[in] Oplock

Puntatore oplock opaco per il file. Questo puntatore deve essere stato inizializzato da una chiamata precedente a FltInitializeOplock.

[in] CallbackData

Puntatore alla struttura dei dati di callback (FLT_CALLBACK_DATA) per l'operazione di I/O.

[in] Flags

Maschera di bit per l'operazione di I/O del file associato. Un driver minifilter imposta bit per specificare il comportamento di FltOplockBreakToNoneEx. Il parametro Flags include le opzioni seguenti:

OPLOCK_FLAG_COMPLETE_IF_OPLOCKED (0x00000001)

Consente a un'interruzione di oplock di procedere senza bloccare o in sospeso l'operazione che ha causato l'interruzione del blocco. In genere, questo flag viene usato solo se l'operazione di I/O rappresentata dai dati di callback a cui punta il parametro CallbackData è un'operazione di IRP_MJ_CREATE.

[in, optional] Context

Puntatore alle informazioni di contesto definite dal chiamante da passare alle routine di callback a cui puntano i parametri WaitCompletionRoutine e PrePostCallbackDataRoutine .

[in, optional] WaitCompletionRoutine

Puntatore a una routine di callback fornita dal chiamante. Se un'interruzione di oplock è in corso, questa routine viene chiamata al termine dell'interruzione. Questo parametro è facoltativo e può essere NULL. Se è NULL, il chiamante viene inserito in uno stato di attesa fino al completamento dell'interruzione di blocco.

Questa routine viene dichiarata come segue:

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

Questa routine include i parametri seguenti:

CallbackData

Puntatore alla struttura dei dati di callback per l'operazione di I/O.

Contesto

Puntatore alle informazioni di contesto passato nel parametro Context a FltOplockBreakToNoneEx.

[in, optional] PrePostCallbackDataRoutine

Puntatore a una routine di callback fornita dal chiamante da chiamare se l'operazione di I/O deve essere pennata. La routine viene chiamata prima che il pacchetto oplock pend l'IRP. Questo parametro è facoltativo e può essere NULL.

Questa routine viene dichiarata come segue:

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

Questa routine include i parametri seguenti:

CallbackData

Puntatore alla struttura dei dati di callback per l'operazione di I/O.

Contesto

Puntatore alle informazioni di contesto passato nel parametro Context a FltOplockBreakToNoneEx.

Valore restituito

FltOplockBreakToNoneEx restituisce uno dei codici di FLT_PREOP_CALLBACK_STATUS seguenti:

Codice restituito Descrizione
FLT_PREOP_COMPLETE
FltOplockBreakToNoneEx ha rilevato un errore di allocazione del pool o una chiamata alla funzione FsRtlOplockBreakToNoneEx ha restituito un errore. FltOplockBreakToNoneEx imposta il codice di errore nel membro Stato della struttura IO_STATUS_BLOCK . La struttura IO_STATUS_BLOCK viene specificata nel membro IoStatusdella struttura dati di callback FLT_CALLBACK_DATA. Il parametro CallbackData punta a questa FLT_CALLBACK_DATA.
FLT_PREOP_PENDING
È stata avviata un'interruzione di oplock, che ha causato la pubblicazione dell'operazione di I/O in una coda di lavoro. L'operazione di I/O è rappresentata dai dati di callback a cui punta il parametro CallbackData .
FLT_PREOP_SUCCESS_WITH_CALLBACK
I dati di callback a cui punta il parametro CallbackData non sono stati pennati e l'operazione di I/O è stata eseguita immediatamente. Tenere presente che se il chiamante specificato OPLOCK_FLAG_COMPLETE_IF_OPLOCKED nel parametro Flags , un'interruzione di oplock potrebbe effettivamente essere in corso anche se l'operazione di I/O non è stata pennata. Per determinare se si tratta della situazione, il chiamante deve verificare la presenza di STATUS_OPLOCK_BREAK_IN_PROGRESS nel membro Statodella struttura IO_STATUS_BLOCK. La struttura IO_STATUS_BLOCK viene specificata nel membro IoStatusdella struttura dati di callback FLT_CALLBACK_DATA.

Commenti

Per altre informazioni sui blocchi opportunistici, vedere la documentazione di Microsoft Windows SDK.

Requisiti

Requisito Valore
Client minimo supportato La routine FltOplockBreakToNoneEx è disponibile a partire da Windows 7.
Piattaforma di destinazione Universale
Intestazione fltkernel.h (includere Fltkernel.h)
Libreria FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Vedi anche

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakToNoneEx

IO_STATUS_BLOCK