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 |
---|---|
|
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. |
|
È 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 . |
|
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 |