Freigeben über


IoCsqRemoveNextIrp-Funktion (wdm.h)

Die IoCsqRemoveNextIrp-Routine entfernt den nächsten übereinstimmenden IRP in der Warteschlange.

Syntax

PIRP IoCsqRemoveNextIrp(
  [in, out]      PIO_CSQ Csq,
  [in, optional] PVOID   PeekContext
);

Parameter

[in, out] Csq

Zeiger auf die Verteilungstabelle des Treibers für abbruchsichere IRP-Warteschlangen. Die Dispatchtabelle muss von IoCsqInitialize initialisiert werden.

[in, optional] PeekContext

Ein Zeiger auf einen vom Treiber definierten Kontextwert. IoCsqRemoveNextIrp übergibt diesen Parameter an die CsqPeekNextIrp-Routine des Treibers. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

Diese Routine gibt einen Zeiger auf den nächsten übereinstimmenden IRP in der Warteschlange zurück, oder NULL , wenn keine IRPs mehr verfügbar sind. Die Routine gibt nur IRPs zurück, die noch nicht abgebrochen wurden.

Hinweise

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

  1. Ruft die CsqAcquireLock-Routine der Warteschlange auf, um die Warteschlange zu sperren.
  2. Ruft die CsqPeekNextIrp-Routine der Warteschlange auf, um den nächsten übereinstimmenden IRP in der Warteschlange zu finden. IoCsqRemoveNextIrp übergibt den Wert des PeekContext-Parameters als PeekContext-Parameter von CsqPeekNextIrp. CsqPeekNextIrp gibt einen Zeiger auf die nächste übereinstimmende IRP oder NULL zurück, wenn kein übereinstimmender IRP vorhanden ist.
  3. Wenn der Rückgabewert von CsqPeekNextIrp ungleich NULL ist, ruft IoCsqRemoveNextIrp die CsqRemoveIrp-Routine der Warteschlange auf, um das IRP zu entfernen.
  4. Ruft die CsqReleaseLock-Routine der Warteschlange auf, um die Warteschlange zu entsperren.
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 IoCsqRemoveNextIrp müssen unter 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 unter Windows 2000 und Windows 98/Me funktionieren müssen, können stattdessen einen Link zu 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

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp