Funzione FltCbdqRemoveIo (fltkernel.h)
FltCbdqRemoveIo rimuove un particolare elemento dalla coda dei dati di callback di un driver minifilter.
Sintassi
PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
[in, out] PFLT_CALLBACK_DATA_QUEUE Cbdq,
[in] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);
Parametri
[in, out] Cbdq
Puntatore a una coda di dati di callback annullata. Questa coda deve essere stata inizializzata chiamando FltCbdqInitialize.
[in] Context
Puntatore di contesto per l'elemento da rimuovere. Questo contesto viene inizializzato da FltCbdqInsertIo quando la richiesta di I/O viene inserita per la prima volta nella coda. Questo parametro è obbligatorio e deve essere diverso da NULL.
Valore restituito
FltCbdqRemoveIo restituisce un puntatore alla struttura dei dati di callback per la richiesta di I/O rimossa dalla coda. Se non viene trovata alcuna richiesta di I/O corrispondente o se la coda è vuota, FltCbdqRemoveIo restituisce NULL.
Commenti
FltCbdqRemoveIo rimuove la struttura dei dati di callback (FLT_CALLBACK_DATA) per una determinata operazione di I/O da una coda di dati di callback del driver minifilter. FltCbdqRemoveIo può essere usato solo per eliminare una struttura di dati di callback a cui è associata una struttura Context . Questa associazione viene creata quando la struttura dei dati di callback viene inserita nella coda dei dati di callback da FltCbdqInsertIo.
I driver minifilter possono usare le routine FltCbdqXxx per implementare una coda di dati di callback per le operazioni di I/O basate su IRP. Usando queste routine, i driver minifilter possono rendere le code in modo sicuro; il sistema gestisce in modo trasparente l'annullamento di I/O per i driver minifilter.
Le routine FltCbdqXxx possono essere usate solo per le operazioni di I/O basate su IRP. Per determinare se una determinata struttura di dati di callback rappresenta un'operazione di I/O basata su IRP, utilizzare la macro FLT_IS_IRP_OPERATION .
Una coda di dati di callback viene inizializzata da FltCbdqInitialize. FltCbdqRemoveIo usa le routine fornite nella tabella dispatch della coda per bloccare la coda e rimuovere la struttura dei dati di callback dalla coda. L'operazione di rimozione stessa viene eseguita dalla routine di callback CbdqRemoveIo del driver minifilter.
Se la coda è protetta da un blocco di selezione anziché da un oggetto mutex o da una variabile di risorsa, il chiamante di FltCbdqRemoveIo può essere eseguito in IRQL <= DISPATCH_LEVEL. Se viene usato un mutex o una risorsa, il chiamante deve essere in esecuzione in IRQL <= APC_LEVEL.
C'è una potenziale gara tra il gestore filtri rimuovendo una richiesta di I/O annullata e il driver di filtro rimuovendolo perché è stato completato. È importante notare che il contesto della richiesta rimane valido dopo la prima rimozione, causando un secondo tentativo di rimozione non riuscita.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | fltkernel.h (include Fltkernel.h) |
IRQL | Vedere la sezione Osservazioni. |