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. |