Funzione FltPerformAsynchronousIo (fltkernel.h)

Un driver minifilter chiama FltPerformAsynchronousIo per avviare un'operazione di I/O asincrona.

Sintassi

NTSTATUS FLTAPI FltPerformAsynchronousIo(
  [in, out] PFLT_CALLBACK_DATA               CallbackData,
  [in]      PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
  [in]      PVOID                            CallbackContext
);

Parametri

[in, out] CallbackData

Puntatore a una struttura di dati di callback (FLT_CALLBACK_DATA) allocata da una chiamata precedente a FltAllocateCallbackData. Questo parametro è obbligatorio e non può essere NULL. Il chiamante è responsabile della liberazione di questa struttura quando non è più necessaria chiamando FltFreeCallbackData.

[in] CallbackRoutine

Puntatore a una routine di callback tipizzata PFLT_COMPLETED_ASYNC_IO_CALLBACK da chiamare al termine dell'operazione di I/O. Nota: Gestione filtri chiama questa routine dopo che chiama le routine di callback di postoperazione (PFLT_POST_OPERATION_CALLBACK) di qualsiasi driver minifilter le cui istanze sono collegate sotto l'istanza di avvio (specificata nel parametro Instance a FltAllocateCallbackData). Questo parametro è obbligatorio e non può essere NULL. Gestione filtri chiama sempre questa routine, anche quando FltPerformAsynchronousIo ha esito negativo.

[in] CallbackContext

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

Valore restituito

FltPerformAsynchronousIo restituisce STATUS_SUCCESS per indicare che l'operazione di I/O è stata completata dal file system e la routine di callback a cui punta CallbackRoutine è stata chiamata. In caso contrario, restituisce un valore NTSTATUS appropriato, ad esempio uno dei seguenti:

Codice restituito Descrizione
STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST IRP_MJ_CREATE richieste non possono essere eseguite in modo asincrono. Si tratta di un codice di errore.
STATUS_PENDING L'operazione ha restituito STATUS_PENDING. Gestione filtri chiamerà la routine di callback a cui CallbackRoutine punta al completamento dell'operazione di I/O. Questo codice indica solo che l'operazione è stata avviata.
STATUS_FLT_IO_COMPLETE L'operazione è stata completata dalla routine di callback di preoperazione del driver minifilter le cui istanze sono collegate sotto l'istanza di avvio.

Commenti

Un driver minifilter chiama FltPerformAsynchronousIo per avviare un'operazione di I/O asincrona dopo aver chiamato FltAllocateCallbackData per allocare una struttura di dati di callback per l'operazione.

FltPerformAsynchronousIo invia l'operazione di I/O solo alle istanze del driver minifilter collegate sotto l'istanza di avvio (specificata nel parametro Instance a FltAllocateCallbackData) e al file system. I driver minifilter collegati sopra l'istanza specificata non ricevono l'operazione di I/O.

I driver minifilter possono avviare solo operazioni di I/O basate su IRP. Non possono avviare operazioni di callback di I/O o file system veloci (FSFilter).

I driver minifilter devono usare FltPerformAsynchronousIo solo per le operazioni di I/O asincrone per le quali non è possibile usare routine come le seguenti:

IRP_MJ_CREATE richieste non possono essere eseguite in modo asincrono.

La struttura dei dati di callback (FLT_CALLBACK_DATA) può essere liberata o riutilizzata in qualsiasi momento dopo la chiamata della routine di callback a cui callbackRoutine punta. Il chiamante può liberare la struttura dei dati di callback chiamando FltFreeCallbackData o preparandola per il riutilizzo chiamando FltReuseCallbackData.

Nota

STATUS_SUCCESS e STATUS_FLT_IO_COMPLETE indicano che l'operazione di I/O è stata completata, ma non indica lo stato finale dell'operazione di I/O. Per determinare lo stato effettivo dell'operazione restituito dai driver minifilter sottostanti, dai driver di filtro e dal file system, callbackRoutine deve esaminare il membro IoStatus della struttura dei dati di callback ricevuta nel parametro CallbackContext di CallbackRoutine.

Poiché Gestione filtri chiama sempre la routine di callback a cui CallbackRoutine punta, anche quando FltPerformAsynchronousIo ha esito negativo, il driver minifilter può eseguire le operazioni di liberamento o riutilizzo direttamente nella routine di callback.

Il chiamante di FltPerformAsynchronousIo può essere eseguito in IRQL <= APC_LEVEL se il flag IRP_PAGING_IO è impostato nel membro IrpFlags della struttura FLT_IO_PARAMETER_BLOCK per l'operazione. Questo flag è valido solo per le operazioni di IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_QUERY_INFORMATION e IRP_MJ_SET_INFORMATION. In caso contrario, il chiamante deve essere in esecuzione in irQL PASSIVE_LEVEL.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (include Fltkernel.h)
Libreria FltMgr.lib
DLL Fltmgr.sys
IRQL Vedere la sezione Osservazioni.

Vedi anche

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData

FltPerformSynchronousIo

FltReuseCallbackData

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK