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. Il contesto 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 ne ha uno. 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.
Commenti
IoCsqInsertIrpEx usa le routine di invio della coda per inserire l'IRP. Routine IoCsqInsertIrpEx :
- Chiama la routine CsqAcquireLock della coda per bloccare la coda.
- Se la struttura IO_CSQ della coda è stata inizializzata da IoCsqInitialize, IoCsqInsertIrpEx chiama la routine 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 CsqReleaseLock della coda per sbloccare la coda.
Per altre informazioni, vedere Code IRP cancel-safe.
Si noti che le routine IoCsqXxx usano il membro DriverContext[3] dell'IRP per contenere le informazioni sul contesto di IRP. I driver che usano queste routine per accodare i provider di integrazione devono lasciare inutilizzati i membri.
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.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows Server 2003 e versioni successive del sistema operativo Windows. La routine è disponibile anche nella libreria Csq.lib fornita con Windows Driver Kit (WDK) e Driver Development Kit (DDK) per Windows Server 2003. I driver che devono funzionare anche in Windows XP, Windows 2000 e Windows 98/Me possono invece collegarsi a Csq.lib per usare la routine. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (vedere sezione Osservazioni) |
Regole di conformità DDI | IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead2, RemoveLockForwardRead2(wdm) , RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseShutdown(wdm),RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm) |