Partager via


Fonction IoCsqInsertIrp (wdm.h)

La routine IoCsqInsertIrp insère un IRP dans la file d’attente IRP annulée du pilote.

Syntaxe

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

Paramètres

[in, out] Csq

Pointeur vers la structure IO_CSQ pour la file d’attente IRP annuler-safe du pilote. Cette structure doit avoir été initialisée par IoCsqInitialize ou IoCsqInitializeEx.

[in, out] Irp

Pointeur vers l’IRP à mettre en file d’attente.

[out, optional] Context

Pointeur vers une structure IO_CSQ_IRP_CONTEXT. IoCsqInsertIrp initialise cette structure avec des informations de contexte pour l’IRP inséré. Le pilote transmet cette valeur à IoCsqRemoveIrp pour supprimer l’IRP de la file d’attente. de contexte peut être NULL si le pilote n’utilise pas IoCsqRemoveIrp pour supprimer cet IRP de la file d’attente.

Valeur de retour

Aucun

Remarques

IoCsqInsertIrp utilise les routines de répartition de la file d’attente pour insérer l’IRP. Routine IoCsqInsertIrp :

  1. Appelle la routine CsqAcquireLock de la file d’attente pour verrouiller la file d’attente.
  2. Appelle la routine CsqInsertIrp de la file d’attente pour insérer l’IRP.
  3. Marque l’IRP comme étant en attente.
  4. Appelle la routine CsqReleaseLock de la file d’attente pour déverrouiller la file d’attente.
Si l’IRP à insérer a déjà été annulé, IoCsqInsertIrp n’essaie pas d’insérer l’IRP dans la file d’attente.

Les pilotes peuvent également utiliser IoCsqInsertIrpEx pour insérer un IRP dans la file d’attente. Pour une file d’attente spécifiée par IoCsqInitializeEx, IoCsqInsertIrpEx fournit des fonctionnalités supplémentaires. Pour plus d’informations, consultez Cancel-Safe files d’attente IRP.

Notez que les routines IoCsqXxx utilisent le membre DriverContext[3] de l’IRP pour contenir des informations de contexte IRP. Les pilotes qui utilisent ces routines pour mettre en file d’attente les fournisseurs d’intégration doivent laisser ce membre inutilisé.

Les appelants de IoCsqInsertIrp doivent s’exécuter à un <IRQL = DISPATCH_LEVEL. Les routines de rappel du pilote doivent fonctionner correctement à ce runtime IRQL.

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Windows XP et versions ultérieures de Windows. Les pilotes qui doivent également fonctionner dans Windows 2000 et Windows 98/Me peuvent à la place lier à Csq.lib pour utiliser la routine.
plateforme cible Universel
d’en-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (voir la section Remarques)
règles de conformité DDI IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveRemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl (wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Voir aussi

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp