Funzione IoCsqInsertIrpEx (wdm.h)
La routine IoCsqInsertIrpEx inserisce un IRP nella coda IRP annulla-sicura del driver.
Sintassi
NTSTATUS IoCsqInsertIrpEx(
[in, out] PIO_CSQ Csq,
[in, out] PIRP Irp,
[out, optional] PIO_CSQ_IRP_CONTEXT Context,
[in, optional] PVOID InsertContext
);
Parametri
[in, out] Csq
Puntatore alla struttura IO_CSQ per la coda IRP annullata del driver. Questa struttura deve essere stata inizializzata da IoCsqInitialize o IoCsqInitializeEx.
[in, out] Irp
Puntatore all'IRP da accodare.
[out, optional] Context
Puntatore a una struttura IO_CSQ_IRP_CONTEXT. IoCsqInsertIrpEx inizializza questa struttura con informazioni di contesto per l'IRP inserito. Il driver passa questo valore a IoCsqRemoveIrp per eliminare l'IRP dalla coda. la context può essere NULL se il driver non userà IoCsqRemoveIrp per rimuovere l'IRP dalla coda.
[in, optional] InsertContext
Puntatore a un valore di contesto definito dal driver. Questo parametro viene passato alla routine CsqInsertIrpEx del driver, se presente. In caso contrario, questo parametro viene ignorato.
Valore restituito
Se il parametro csq è stato inizializzato con IoCsqInitialize, IoCsqInsertIrpEx restituisce sempre STATUS_SUCCESS. Se csq è stato inizializzato con IoCsqInitializeEx, IoCsqInsertIrpEx restituisce il valore restituito dalla routine csqInsertIrpEx del driver CsqInsertIrpEx.
Osservazioni
IoCsqInsertIrpEx usa le routine dispatch della coda per inserire l'IRP. Routine IoCsqInsertIrpEx:
- Chiama la routine csqAcquireLock della coda per bloccare la coda.
- Se la struttura di IO_CSQ della coda è stata inizializzata da IoCsqInitialize, IoCsqInsertIrpEx chiama la routine di CsqInsertIrp della coda per inserire l'IRP. Se la struttura di IO_CSQ della coda è stata inizializzata da IoCsqInitializeEx, IoCsqInsertIrpEx chiama la routine csqInsertIrpEx della coda per inserire l'IRP, e passa il parametro InsertContext come parametro InsertContext di CsqInsertIrpEx.
- Chiama la routine di CsqReleaseLock della coda per sbloccare la coda.
Per altre informazioni, vedere Cancel-Safe code IRP.
Si noti che routine IoCsqXxx utilizzano il DriverContextmembro [3] dell'IRP per contenere le informazioni sul contesto IRP. I driver che usano queste routine per accodare i runtime di integrazione devono lasciare inutilizzati il membro.
I chiamanti di IoCsqInsertIrpEx devono essere in esecuzione in un <IRQL = DISPATCH_LEVEL. Le routine di callback del driver devono funzionare correttamente in questo IRQL.