Funzione FltReissueSynchronousIo (fltkernel.h)
FltReissueSynchronousIo avvia una nuova operazione di I/O sincrona che usa i parametri di un'operazione di I/O sincronizzata in precedenza.
Sintassi
VOID FLTAPI FltReissueSynchronousIo(
[in] PFLT_INSTANCE InitiatingInstance,
[in] PFLT_CALLBACK_DATA CallbackData
);
Parametri
[in] InitiatingInstance
Puntatore di istanza opaco all'istanza del driver minifilter che esegue nuovamente l'operazione di I/O. Deve essere la stessa istanza che ha avviato l'operazione di I/O precedente. Questo parametro è obbligatorio e non può essere impostato su NULL.
[in] CallbackData
Puntatore alla struttura dei dati di callback (FLT_CALLBACK_DATA) da un'operazione di I/O sincronizzata in precedenza. Questo parametro è obbligatorio e non può essere impostato su NULL.
Valore restituito
nessuno
Osservazioni
Un driver minifilter chiama FltReissueSynchronousIo da una routine di callback postperation (PFLT_POST_OPERATION_CALLBACK) per eseguire nuovamente una richiesta di I/O sincronizzata. In genere chiama FltReissueSynchronousIo da una routine di callback di post-esecuzione per eseguire nuovamente un'operazione non riuscita con parametri diversi o per gestire un rimbalzo del reparse. Tuttavia, può anche chiamare FltReissueSynchronousIo per eseguire nuovamente l'I/O generato dal driver minifilter tramite chiamate alle routine FltAllocateCallbackData e FltPerformSynchronousIo . In questo caso, non importa se chiama FltReissueSynchronousIo in una routine di callback di post-esecuzione o all'esterno del contesto di una routine di callback dell'operazione. Per le chiamate esterne al contesto di una routine di callback di post-operazione, è consigliabile usare invece le routine FltReuseCallbackData e FltPerformSynchronousIo .
Il chiamante può modificare il contenuto del blocco di parametri di I/O della struttura dei dati di callback (FLT_CALLBACK_DATA) prima di eseguire nuovamente la richiesta di I/O. In caso affermativo, deve chiamare FltSetCallbackDataDirty prima di chiamare FltReissueSynchronousIo.
Ad esempio, se un driver minifilter usa reparse points e la routine di callback post-create viene chiamata per un'operazione di creazione che ha restituito STATUS_REPARSE, il driver minifilter può eseguire nuovamente l'operazione di creazione per i propri punti di ripristino. In questo caso, il driver minifilter completerà i passaggi seguenti:
Impostare il flag FILE_OPEN_REPARSE_POINT nel blocco di parametri di I/O della struttura dei dati di callback.
Chiamare FltSetCallbackDataDirty.
Chiamare FltReissueSynchronousIo per eseguire nuovamente la richiesta di creazione.
Gestione filtri invia la richiesta di I/O ristampata solo alle istanze del driver minifilter associate sotto l'istanza di avvio (specificata nel parametro InitiatingInstance ) e al file system. Le istanze del driver minifilter collegate sopra l'istanza di avvio non ricevono la richiesta di I/O ristampata.
È possibile eseguire nuovamente solo le operazioni di I/O sincronizzate. Per fornire al driver la possibilità di eseguire nuovamente, chiamando FltReissueSynchronousIo nella routine di callback di postoperazione, un driver minifilter deve restituire in modo specifico FLT_PREOP_SYNCHRONIZE nella routine di callback di preoperazione.
Nota
Il driver minifilter non chiama la routine FltIsOperationSynchronous per determinare se la routine di callback di preoperazione per questa operazione ha restituito FLT_PREOP_SYNCHRONIZE. Il driver minifilter chiama FltIsOperationSynchronous per determinare se l'operazione stessa è sincrona dal punto di vista del gestore di I/O.
È possibile eseguire nuovamente solo operazioni di I/O basate su IRP. Le operazioni di I/O veloci e le operazioni di callback del filtro file system (FSFilter) non possono essere ristampate. Per determinare se un'operazione di I/O è basata su IRP, usare la macro FLT_IS_IRP_OPERATION .
Non è possibile eseguire nuovamente un'operazione di creazione (IRP_MJ_CREATE) annullata. Prima di chiamare FltReissueSynchronousIo per un'operazione di creazione, i chiamanti devono controllare il membro Flags dell'oggetto file per l'operazione di creazione. Se il flag FO_FILE_OPEN_CANCELLED è impostato, significa che l'operazione di creazione è stata annullata e verrà eseguita un'operazione di chiusura (IRP_MJ_CLOSE) per questo oggetto file. Se FltReissueSynchronousIo viene chiamato per un'operazione di creazione annullata, Gestione filtri non riesce a eseguire nuovamente la richiesta di I/O con STATUS_CANCELLED.
Nota
Quando i driver minifilter eseguono nuovamente la creazione nel callback post-creazione, non devono rilasciare e impostare il buffer associato al relativo punto di reparse (campo TagData in CallbackData) su NULL. In alternativa, Gestione filtri rilascia e imposta il buffer su NULL.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Update Rollup 1 per SP4; Windows XP SP2 |
Server minimo supportato | Windows Server 2003 SP1 |
Piattaforma di destinazione | Universale |
Intestazione | fltkernel.h (include FltKernel.h) |
Libreria | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL (L'I/O non di paging può essere ristampato solo in PASSIVE_LEVEL) |