Freigeben über


IoCsqRemoveIrp-Funktion (wdm.h)

Die IoCsqRemoveIrp-Routine entfernt ein bestimmtes IRP aus der Warteschlange.

Syntax

PIRP IoCsqRemoveIrp(
  [in, out] PIO_CSQ             Csq,
  [in, out] 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 von IoCsqInitialize oder IoCsqInitializeEx initialisiert worden sein.

[in, out] Context

Zeiger auf die IO_CSQ_IRP_CONTEXT Struktur, die den zu entfernenden IRP identifiziert. Die IO_CSQ_IRP_CONTEXT-Struktur wird durch IoCsqInsertIrp oder IoCsqInsertIrpEx initialisiert, wenn das IRP zum ersten Mal in die Warteschlange eingefügt wird.

Rückgabewert

Diese Routine gibt einen Zeiger auf den IRP zurück, der aus der Warteschlange entfernt wurde, oder NULL , wenn diese IRP abgebrochen wurde.

Hinweise

IoCsqRemoveIrp verwendet die Dispatchroutinen der Warteschlange, um die IRP zu entfernen. Die IoCsqRemoveIrp-Routine :

  1. Ruft die CsqAcquireLock-Routine der Warteschlange auf, um die Warteschlange zu sperren.
  2. Verwendet den IrpContext-Parameter , um zu bestimmen, welches IRP entfernt werden soll, und ruft die CsqRemoveIrp-Routine der Warteschlange auf, um diese IRP zu entfernen.
  3. Ruft die CsqReleaseLock-Routine der Warteschlange auf, um die Warteschlange zu entsperren.
Treiber können die IoCsqRemoveNextIrp-Routine verwenden, um ein IRP zu entfernen, das einem bestimmten Kriterium entspricht. Weitere Informationen finden Sie unter Cancel-Safe IRP-Warteschlangen.

Beachten Sie, dass IoCsqXxx-Routinen das DriverContext[3]- Element des IRP 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 IoCsqRemoveIrp müssen an einem IRQL <= DISPATCH_LEVEL ausgeführt werden. Die Rückrufroutinen des Treibers müssen in diesem IRQL ordnungsgemäß funktionieren.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (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 eine Verknüpfung mit Csq.lib herstellen, 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")

Weitere Informationen

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveNextIrp