Condividi tramite


Funzione FltCbdqInsertIo (fltkernel.h)

FltCbdqInsertIo inserisce la struttura dei dati di callback per un'operazione di I/O in una coda di dati di callback del driver di filtro.

Sintassi

NTSTATUS FLTAPI FltCbdqInsertIo(
  [in, out]      PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]           PFLT_CALLBACK_DATA                  Cbd,
  [in, optional] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context,
  [in, optional] PVOID                               InsertContext
);

Parametri

[in, out] Cbdq

Puntatore alla coda dei dati di callback annulla-sicura del chiamante. Questa coda deve essere stata inizializzata chiamando FltCbdqInitialize.

[in] Cbd

Puntatore alla struttura dei dati di callback (FLT_CALLBACK_DATA) per l'operazione di I/O da accodare. L'operazione deve essere un'operazione di I/O basata su IRP.

[in, optional] Context

Variabile fornita dal chiamante che riceve un puntatore al contesto opaco per la richiesta di I/O. I driver di filtro possono usare questo puntatore per identificare un elemento specifico nella coda in modo che possa essere rimosso chiamando FltCbdqRemoveIo. Se il driver di filtro non è necessario per rimuovere richieste di I/O specifiche dalla coda, questo parametro può essere NULL.

[in, optional] InsertContext

Puntatore al contesto da passare alla routine di callback del driver di filtro CbdqInsertIo .

Valore restituito

FltCbdqInsertIo restituisce STATUS_SUCCESS quando la struttura dei dati di callback è stata inserita nella coda dei dati di callback o un valore NTSTATUS appropriato, ad esempio quanto segue:

Codice restituito Descrizione
STATUS_FLT_CBDQ_DISABLED La struttura dei dati di callback non è stata inserita nella coda dei dati di callback perché la coda è attualmente disabilitata. Per ripristinare la coda, chiamare FltCbdqEnable. Si tratta di un codice di errore.

Nota

In caso di esito positivo, FltCbdqInsertIo restituisce il callback insertIo del filtro; ad esempio, un filtro potrebbe restituire STATUS_SUCCESS o STATUS_PENDING per indicare l'esito positivo. È importante che il filtro sia auto-coerente su qualsiasi valore usato per indicare l'esito positivo.

Commenti

FltCbdqInsertIo inserisce la struttura di dati di callback (FLT_CALLBACK_DATA) specificata in una coda di dati di callback del driver di filtro.

  • Si noti che è presente una condizione di gara potenziale tra un driver di filtro che inserisce i dati di callback e l'IRP associato che viene annullato. Questa operazione può essere evitata richiamando immediatamente la routine di annullamento della coda se l'IRP è già stata annullata.

I driver di filtro 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 di filtro possono rendere le code annullate; il sistema gestisce in modo trasparente l'annullamento di I/O per i driver di filtro.

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, usare la macro FLT_IS_IRP_OPERATION .

Una coda di dati di callback viene inizializzata chiamando FltCbdqInitialize. FltCbdqInsertIo usa le funzioni fornite nella tabella di invio della coda per bloccare la coda e inserire la struttura dei dati di callback nella coda. L'operazione di inserimento viene eseguita dalla routine CbdqInsertIo della coda.

Per informazioni dettagliate su come creare una coda di dati di callback, vedere FltCbdqInitialize . Usare FltCbdqRemoveIo per rimuovere una richiesta di I/O specifica dalla coda o FltCbdqRemoveNextIo per rimuovere la richiesta di I/O disponibile successiva.

Se la coda è protetta da un blocco spin anziché da un oggetto mutex o una variabile di risorsa, il chiamante di FltCbdqInsertIo 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.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (includere Fltkernel.h)
IRQL Vedere La sezione Osservazioni.

Vedi anche

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqRemoveIo

FltCbdqRemoveNextIo