Condividi tramite


Funzione FltOplockBreakToNoneEx (fltkernel.h)

Il FltOplockBreakToNoneEx routine interrompe immediatamente tutti i blocchi opportunistici (oplock) senza considerare alcuna chiave 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 di file associata. Un driver minifiltro imposta i bit per specificare il comportamento di FltOplockBreakToNoneEx. Il parametro flag 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 oplock. 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 IRP_MJ_CREATE.

[in, optional] Context

Puntatore alle informazioni sul 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 è in corso un'interruzione di oplock, questa routine viene chiamata al completamento 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 oplock.

Questa routine viene dichiarata come segue:

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

Questa routine presenta 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 sospesa. La routine viene chiamata prima che il pacchetto oplock eseprima 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 presenta 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 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 Status della struttura IO_STATUS_BLOCK. La struttura IO_STATUS_BLOCK viene specificata nel membro IoStatus della struttura dei dati di callback FLT_CALLBACK_DATA. Il parametro CallbackData punta a questo 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 è stata applicata la penna e l'operazione di I/O è stata eseguita immediatamente. Tenere presente che se il chiamante ha specificato OPLOCK_FLAG_COMPLETE_IF_OPLOCKED nel parametro flag di, un'interruzione di oplock potrebbe essere effettivamente in corso anche se l'operazione di I/O non è stata bloccata. Per determinare se si tratta della situazione, il chiamante deve verificare la presenza di STATUS_OPLOCK_BREAK_IN_PROGRESS nel membro Status della struttura IO_STATUS_BLOCK. La struttura IO_STATUS_BLOCK viene specificata nel membro IoStatus della struttura dei dati di callback FLT_CALLBACK_DATA.

Osservazioni

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

Fabbisogno

Requisito Valore
client minimo supportato La routine FltOplockBreakToNoneEx è disponibile a partire da Windows 7.
piattaforma di destinazione Universale
intestazione fltkernel.h (include Fltkernel.h)
libreria FltMgr.lib
dll Fltmgr.sys
IRQL <= APC_LEVEL

Vedere anche

FLT_CALLBACK_DATA

FltInitializeOplock

FsRtlOplockBreakToNoneEx

IO_STATUS_BLOCK