Freigeben über


IoCsqInsertIrpEx-Funktion (wdm.h)

Die IoCsqInsertIrpEx-Routine fügt einen IRP in die abbruchsichere IRP-Warteschlange des Treibers ein.

Syntax

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

Parameter

[in, out] Csq

Zeiger auf die IO_CSQ-Struktur für die abbruchsichere IRP-Warteschlange des Treibers. Diese Struktur muss von IoCsqInitialize oder IoCsqInitializeEx initialisiert worden sein.

[in, out] Irp

Zeiger auf die IRP, die in die Warteschlange eingereiht werden soll.

[out, optional] Context

Zeiger auf eine IO_CSQ_IRP_CONTEXT-Struktur . IoCsqInsertIrpEx initialisiert diese Struktur mit Kontextinformationen für das eingefügte IRP. Der Treiber übergibt diesen Wert an IoCsqRemoveIrp , um den IRP aus der Warteschlange zu löschen. Der Kontext kann NULL sein, wenn der Treiber ioCsqRemoveIrp nicht verwendet, um diese IRP aus der Warteschlange zu entfernen.

[in, optional] InsertContext

Zeiger auf einen vom Treiber definierten Kontextwert. Dieser Parameter wird an die CsqInsertIrpEx-Routine des Treibers übergeben, sofern er über einen verfügt. Andernfalls wird dieser Parameter ignoriert.

Rückgabewert

Wenn der Csq-Parameter mit IoCsqInitialize initialisiert wurde, gibt IoCsqInsertIrpEx immer STATUS_SUCCESS zurück. Wenn Csq mit IoCsqInitializeEx initialisiert wurde, gibt IoCsqInsertIrpEx den Wert zurück, der von der CsqInsertIrpEx-Routine des Treibers zurückgegeben wurde.

Hinweise

IoCsqInsertIrpEx verwendet die Dispatchroutinen der Warteschlange, um die IRP einzufügen. Die IoCsqInsertIrpEx-Routine :

  1. Ruft die CsqAcquireLock-Routine der Warteschlange auf, um die Warteschlange zu sperren.
  2. Wenn die IO_CSQ Struktur der Warteschlange von IoCsqInitialize initialisiert wurde, ruft IoCsqInsertIrpEx die CsqInsertIrp-Routine der Warteschlange auf, um den IRP einzufügen. Wenn die IO_CSQ Struktur der Warteschlange von IoCsqInitializeEx initialisiert wurde, ruft IoCsqInsertIrpEx die CsqInsertIrpEx-Routine der Warteschlange auf, um das IRP einzufügen, und übergibt den InsertContext-Parameter als InsertContext-Parameter von CsqInsertIrpEx.
  3. Ruft die CsqReleaseLock-Routine der Warteschlange auf, um die Warteschlange zu entsperren.
Wenn die einzufügende IRP bereits abgebrochen wurde, versucht IoCsqInsertIrpEx nicht, den IRP in die Warteschlange einzufügen.

Weitere Informationen finden Sie unter Cancel-Safe IRP-Warteschlangen.

Beachten Sie, dass IoCsqXxx-Routinen das Member DriverContext[3] des IRP verwenden, um IRP-Kontextinformationen zu enthalten. Treiber, die diese Routinen verwenden, um IRPs in die Warteschlange zu stellen, müssen diesen Member nicht verwendet lassen.

Aufrufer von IoCsqInsertIrpEx müssen unter einem IRQL <= DISPATCH_LEVEL ausgeführt werden. Die Rückrufroutinen des Treibers müssen bei diesem IRQL ordnungsgemäß funktionieren.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Server 2003 und höheren Versionen des Windows-Betriebssystems. Die Routine ist auch in der Csq.lib-Bibliothek verfügbar, die im Lieferumfang des Windows Driver Kit (WDK) und des Driver Development Kit (DDK) für Windows Server 2003 enthalten ist. Treiber, die auch unter Windows XP, Windows 2000 und Windows 98/Me funktionieren müssen, können stattdessen mit Csq.lib verknüpft werden, um die Routine zu verwenden.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (siehe Abschnitt Hinweise)
DDI-Complianceregeln 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)

Weitere Informationen

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqRemoveIrp

IoCsqRemoveNextIrp