Funzione IoCsqInsertIrp (wdm.h)

La routine IoCsqInsertIrp inserisce un'IRP nella coda IRP annulla-sicura del driver.

Sintassi

void IoCsqInsertIrp(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context
);

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

Valore restituito

nessuno

Osservazioni

IoCsqInsertIrp usa le routine di invio della coda per inserire l'IRP. Routine IoCsqInsertIrp :

  1. Chiama la routine CsqAcquireLock della coda per bloccare la coda.
  2. Chiama la routine CsqInsertIrp della coda per inserire l'IRP.
  3. Contrassegna l'IRP come in sospeso.
  4. Chiama la routine CsqReleaseLock della coda per sbloccare la coda.
Se l'IRP da inserire è già stato annullato, IoCsqInsertIrp non tenta di inserire l'IRP nella coda.

I driver possono anche usare IoCsqInsertIrpEx per inserire un'IRP nella coda. Per una coda specificata da IoCsqInitializeEx, IoCsqInsertIrpEx offre funzionalità aggiuntive. 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 IoCsqInsertIrp devono essere in esecuzione in un irQL <= DISPATCH_LEVEL. Le routine di callback del driver devono funzionare correttamente in quel irQL.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Windows XP e versioni successive di Windows. I driver che devono funzionare anche in 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

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp