Auf Englisch lesen

Teilen über


IO_CSQ_PEEK_NEXT_IRP Rückruffunktion (wdm.h)

Die CsqPeekNextIrp Routine wird vom System verwendet, um den nächsten übereinstimmenden IRP in einer treiberbasierten, abbruchsicheren IRP-Warteschlange zu finden.

Syntax

C++
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 Warteschlange mit abbruchsicheren IRP-Adressen.

[in, optional] Irp

Zeigen Sie auf eine IRP in der IRP-Warteschlange des Treibers oder NULL-, um den Anfang der Warteschlange anzugeben.

[in, optional] PeekContext

Zeiger auf treiberdefinierte Kontextinformationen. Die CsqPeekNextIrp Routine gibt das erste IRP zurück, das Irp- folgt und mit PeekContext-übereinstimmt.

Rückgabewert

CsqPeekNextIrp gibt den ersten IRP zurück, der Irp- in der Warteschlange folgt und mit PeekContext-übereinstimmt, oder NULL-, wenn kein übereinstimmender IRP vorhanden ist. Wenn Irp-NULL-ist, gibt CsqPeekNextIrp den ersten übereinstimmenden IRP in der Warteschlange zurück oder NULL-, wenn kein übereinstimmender IRP vorhanden ist.

Bemerkungen

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

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

Beispiele

Um eine CsqPeekNextIrp Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine CsqPeekNextIrp- Rückrufroutine zu definieren, die MyCsqPeekNextIrpheißt, verwenden Sie den IO_CSQ_PEEK_NEXT_IRP Typ, wie in diesem Codebeispiel gezeigt:

C++
IO_CSQ_PEEK_NEXT_IRP MyCsqPeekNextIrp;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

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

Der IO_CSQ_PEEK_NEXT_IRP Funktionstyp wird in der Wdm.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die _Use_decl_annotations_ Anmerkung hinzufügen. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp IO_CSQ_PEEK_NEXT_IRP in der Headerdatei angewendet werden, verwendet 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 (include Wdm.h, Ntddk.h, Ntifs.h)

Siehe auch

CsqAcquireLock-

CsqCompleteCanceledIrp-

CsqInsertIrp-

CsqInsertIrpEx

CsqReleaseLock-

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp-

IoCsqInsertIrpEx-

IoCsqRemoveIrp

IoCsqRemoveNextIrp