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.

Vedi anche

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo