Freigeben über


IoCsqInsertIrp-Funktion (wdm.h)

Die IoCsqInsertIrp Routine fügt ein IRP in die cancel-safe IRP-Warteschlange des Treibers ein.

Syntax

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

Parameter

[in, out] Csq

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

[in, out] Irp

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

[out, optional] Context

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

Rückgabewert

Nichts

Bemerkungen

IoCsqInsertIrp verwendet die Dispatch-Routinen der Warteschlange, um das IRP einzufügen. Die IoCsqInsertIrp Routine:

  1. Ruft die CsqAcquireLock Routine der Warteschlange auf, um die Warteschlange zu sperren.
  2. Ruft die CsqInsertIrp Routine der Warteschlange auf, um das IRP einzufügen.
  3. Markiert das IRP als ausstehend.
  4. Ruft die CsqReleaseLock Routine der Warteschlange auf, um die Warteschlange zu entsperren.
Wenn das einzufügende IRP bereits abgebrochen wurde, versucht IoCsqInsertIrp- nicht, das IRP in die Warteschlange einzufügen.

Treiber können auch IoCsqInsertIrpEx- verwenden, um ein IRP in die Warteschlange einzufügen. Für eine Warteschlange, die durch IoCsqInitializeExangegeben wird, bietet IoCsqInsertIrpEx- zusätzliche Funktionen. Weitere Informationen finden Sie unter Cancel-Safe IRP Queues.

Beachten Sie, dass die IoCsq-Xxx- Routinen die DriverContext-[3] des IRP-Elements verwenden, um IRP-Kontextinformationen zu enthalten. Treiber, die diese Routinen verwenden, um IRPs in die Warteschlange zu stellen, müssen dieses Mitglied nicht verwenden.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows XP und höheren Versionen von Windows. Treiber, die auch in Windows 2000 und Windows 98/Me funktionieren müssen, können stattdessen mit "Csq.lib" verknüpft werden, um die Routine zu verwenden.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise")
DDI-Complianceregeln IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), Entfernen, 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)

Siehe auch

CsqAcquireLock-

CsqCompleteCanceledIrp-

CsqInsertIrp-

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock-

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrpEx-

IoCsqRemoveIrp

IoCsqRemoveNextIrp