Freigeben über


IO_CSQ_PEEK_NEXT_IRP Rückruffunktion (wdm.h)

Die CsqPeekNextIrp-Routine wird vom System verwendet, um die nächste übereinstimmende IRP in einer vom Treiber implementierten, abbruchsicheren IRP-Warteschlange zu finden.

Syntax

IO_CSQ_PEEK_NEXT_IRP IoCsqPeekNextIrp;

PIRP IoCsqPeekNextIrp(
  [in]           PIO_CSQ Csq,
  [in, optional] PIRP Irp,
  [in, optional] PVOID PeekContext
)
{...}

Parameter

[in] Csq

Zeiger auf die IO_CSQ-Struktur für die abbruchsichere IRP-Warteschlange.

[in, optional] Irp

Zeiger auf ein IRP in der IRP-Warteschlange des Treibers oder NULL , um den Anfang der Warteschlange anzugeben.

[in, optional] PeekContext

Zeiger auf vom Treiber definierte Kontextinformationen. Die CsqPeekNextIrp-Routine gibt die erste IRP zurück, die auf Irp folgt und PeekContext entspricht.

Rückgabewert

CsqPeekNextIrp gibt den ersten IRP zurück, der auf Irp in der Warteschlange folgt, und entspricht PeekContext oder NULL , wenn keine übereinstimmende IRP vorhanden ist. Wenn IrpNULL ist, gibt CsqPeekNextIrp den ersten übereinstimmenden IRP in der Warteschlange oder NULL zurück, wenn kein übereinstimmender IRP vorhanden ist.

Hinweise

Der Treiber gibt die CsqPeekNextIrp-Routine für eine abbruchsichere IRP-Warteschlange an, wenn er die IO_CSQ Struktur der Warteschlange initialisiert. Der Treiber gibt die Routine als CsqPeekNextIrp-Parameter von IoCsqInitialize oder IoCsqInitializeEx an, wenn er IO_CSQ initialisiert. Weitere Informationen finden Sie unter Cancel-Safe IRP-Warteschlangen.

Das System verwendet CsqPeekNextIrp , um die IRPs in der IRP-Warteschlange des Treibers zu durchlaufen. Beispielsweise verwendet die IoCsqRemoveNextIrp-Routine diese Routine, um die zu entfernende IRP zu finden.

Beispiele

Um eine CsqPeekNextIrp-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine CsqPeekNextIrp-Rückrufroutine mit dem Namen MyCsqPeekNextIrpzu definieren, verwenden Sie den IO_CSQ_PEEK_NEXT_IRP-Typ, wie in diesem Codebeispiel gezeigt:

IO_CSQ_PEEK_NEXT_IRP MyCsqPeekNextIrp;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
PIRP 
 MyCsqPeekNextIrp(
    PIO_CSQ  Csq,
    PIRP  Irp,
    PVOID  PeekContext
    )
  {
      // Function body
  }

Der IO_CSQ_PEEK_NEXT_IRP Funktionstyp ist in der Wdm.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_ Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den IO_CSQ_PEEK_NEXT_IRP Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber. Informationen zu _Use_decl_annotations_finden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)

Weitere Informationen

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp