Condividi tramite


Funzione FltRequestOperationStatusCallback (fltkernel.h)

FltRequestOperationStatusCallback restituisce informazioni sullo stato per l'operazione di I/O specificata.

Sintassi

NTSTATUS FLTAPI FltRequestOperationStatusCallback(
  [in]           PFLT_CALLBACK_DATA                 Data,
  [in]           PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
  [in, optional] PVOID                              RequesterContext
);

Parametri

[in] Data

Puntatore alla struttura dei dati di callback (FLT_CALLBACK_DATA) per l'operazione di I/O. Questo parametro è obbligatorio e non può essere NULL.

[in] CallbackRoutine

Puntatore a una routine di callback chiamata da Gestione filtri dopo la restituzione di IoCallDriver . Questo parametro è obbligatorio e non può essere NULL.

[in, optional] RequesterContext

Puntatore di contesto da passare a CallbackRoutine. Questo parametro è facoltativo e può essere NULL.

Valore restituito

FltRequestOperationStatusCallback restituisce STATUS_SUCCESS o un valore NTSTATUS appropriato, ad esempio uno dei seguenti:

Codice restituito Descrizione
STATUS_FLT_DELETING_OBJECT
L'istanza del driver minifilter viene troncato. Si tratta di un codice di errore.
STATUS_INSUFFICIENT_RESOURCES
FltRequestOperationStatusCallback ha rilevato un errore di allocazione del pool. Si tratta di un codice di errore.
STATUS_INVALID_PARAMETER
FltRequestOperationStatusCallback è stato chiamato da una routine che non era una routine di callback di preoperazione (PFLT_PRE_OPERATION_CALLBACK) oppure l'operazione di I/O era una richiesta IRP_MJ_CLOSE. Si tratta di un codice di errore.

Commenti

Un driver minifilter può chiamare FltRequestOperationStatusCallback per un'operazione di I/O basata su IRP per ottenere il valore di stato restituito da IoCallDriver per l'operazione.

La maggior parte dei driver minifilter non deve mai chiamare FltRequestOperationStatusCallback. In genere, un driver minifilter chiama questa routine solo per determinare se è stato concesso un oplock richiesto.

FltRequestOperationStatusCallback può essere chiamato solo dalla routine di preoperazione (PFLT_PRE_OPERATION_CALLBACK) di un driver minifilter.

FltRequestOperationStatusCallback può essere chiamato solo per operazioni non basate su IRP IRP_MJ_CLOSE. Per determinare se l'operazione è un'operazione basata su IRP, utilizzare la macro FLT_IS_IRP_OPERATION .

Se l'operazione basata su IRP è una richiesta IRP_MJ_CLOSE, viene restituito STATUS_INVALID_PARAMETER.

FltRequestOperationStatusCallback copia il contenuto del blocco di parametri I/O (FLT_IO_PARAMETER_BLOCK) nel membro Iopb dei dati di callback (FLT_CALLBACK_DATA) e si tratta dei dati di callback che verranno passati dalla gestione filtri alla routine specificata nel parametro CallbackRoutine . I dati copiati rappresentano uno snapshot del blocco di parametri I/O al momento in cui la routine di callback di preoperazione (PFLT_PRE_OPERATION_CALLBACK) chiama FltRequestOperationStatusCallback. Se la routine di callback di preoperazione modifica il blocco di parametri I/O dopo aver chiamato FltRequestOperationStatusCallback, il blocco di parametri di I/O passato a CallbackRoutine sarà diverso dal blocco di parametri di I/O che il driver di filtro passa allo stack di driver quando chiama IoCallDriver.

Il codice di esempio seguente di una routine di callback di preoperazione illustra come ciò può verificarsi:

PFLT_CALLBACK_DATA Data;
PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine;
PVOID RequesterContext;
...
if (iopb->MajorFunction == IRP_MJ_READ) {
    FltRequestOperationStatusCallback (Data, CallbackRoutine, RequesterContext);
 Data->Iopb->Parameters.Read.ReadBuffer = newBuffer;
    ...
}

Nell'esempio il buffer di lettura viene modificato dopo la chiamata a FltRequestOperationStatusCallback, quindi quando Gestione filtri chiama CallbackRoutine, passerà un puntatore al buffer precedente anziché al nuovo.

Gestione filtri chiama la callbackRoutine specificata nel contesto del thread di origine in IRQL <= APC_LEVEL.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (include Fltkernel.h)
Libreria Fltmgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Vedi anche

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

IoCallDriver

PFLT_GET_OPERATION_STATUS_CALLBACK

PFLT_PRE_OPERATION_CALLBACK