Condividi tramite


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 :

  1. Chiama la routine CsqAcquireLock della coda per bloccare la coda.
  2. 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.
  3. Chiama la routine CsqReleaseLock della coda per sbloccare la coda.
Se l'IRP da inserire è già stato annullato, IoCsqInsertIrpEx non tenta di inserire l'IRP nella 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)

Vedi anche

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqRemoveIrp

IoCsqRemoveNextIrp