Fonction IoCsqInsertIrpEx (wdm.h)

La routine IoCsqInsertIrpEx insère un IRP dans la file d’attente IRP cancel-safe du pilote.

Syntaxe

NTSTATUS IoCsqInsertIrpEx(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context,
  [in, optional]  PVOID               InsertContext
);

Paramètres

[in, out] Csq

Pointeur vers la structure IO_CSQ de la file d’attente IRP cancel-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 . IoCsqInsertIrpEx 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. Le contexte peut être NULL si le pilote n’utilise pas IoCsqRemoveIrp pour supprimer cette IRP de la file d’attente.

[in, optional] InsertContext

Pointeur vers une valeur de contexte définie par le pilote. Ce paramètre est passé à la routine CsqInsertIrpEx du pilote, le cas échéant. Sinon, ce paramètre est ignoré.

Valeur retournée

Si le paramètre Csq a été initialisé avec IoCsqInitialize, IoCsqInsertIrpEx retourne toujours STATUS_SUCCESS. Si Csq a été initialisé avec IoCsqInitializeEx, IoCsqInsertIrpEx retourne la valeur qui a été retournée par la routine CsqInsertIrpEx du pilote.

Remarques

IoCsqInsertIrpEx utilise les routines de distribution de la file d’attente pour insérer l’IRP. La routine IoCsqInsertIrpEx :

  1. Appelle la routine CsqAcquireLock de la file d’attente pour verrouiller la file d’attente.
  2. Si la structure IO_CSQ de la file d’attente a été initialisée par IoCsqInitialize, IoCsqInsertIrpEx appelle la routine CsqInsertIrp de la file d’attente pour insérer l’IRP. Si la structure IO_CSQ de la file d’attente a été initialisée par IoCsqInitializeEx, IoCsqInsertIrpEx appelle la routine CsqInsertIrpEx de la file d’attente pour insérer l’IRP et transmet le paramètre InsertContext en tant que paramètre InsertContext de CsqInsertIrpEx.
  3. 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é, IoCsqInsertIrpEx ne tente pas d’insérer l’IRP dans la file d’attente.

Pour plus d’informations, consultez Annuler les files d’attente IRP sécurisées.

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

Les appelants d’IoCsqInsertIrpEx doivent être en cours d’exécution à un niveau IRQL <= DISPATCH_LEVEL. Les routines de rappel du pilote doivent fonctionner correctement à cet IRQL.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Server 2003 et versions ultérieures du système d’exploitation Windows. La routine est également disponible dans la bibliothèque Csq.lib fournie avec le Kit de pilotes Windows (WDK) et le Kit de développement de pilotes (DDK) pour Windows Server 2003. Les pilotes qui doivent également fonctionner sur Windows XP, Windows 2000 et Windows 98/Me peuvent à la place lier à Csq.lib pour utiliser la routine.
Plateforme cible Universal
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 Notes)
Règles de conformité DDI IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveLockCheck(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

IoCsqInsertIrp

IoCsqRemoveIrp

IoCsqRemoveNextIrp