Freigeben über


IO_CSQ_INSERT_IRP_EX Rückruffunktion (wdm.h)

Die CsqInsertIrpEx-Routine wird vom System verwendet, um ein IRP in eine vom Treiber implementierte, abbruchsichere IRP-Warteschlange einzufügen.

Syntax

IO_CSQ_INSERT_IRP_EX IoCsqInsertIrpEx;

NTSTATUS IoCsqInsertIrpEx(
  [in] _IO_CSQ *Csq,
  [in] PIRP Irp,
  [in] PVOID InsertContext
)
{...}

Parameter

[in] Csq

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

[in] Irp

Zeiger auf das IRP, das in die IRP-Warteschlange eingefügt werden soll.

[in] InsertContext

Zeiger auf den vom Treiber definierten Kontext für den Einfügevorgang.

Rückgabewert

CsqInsertIrpEx gibt STATUS_SUCCESS zurück, wenn die IRP erfolgreich eingefügt wurde, oder den entsprechenden Fehlercode bei Einem Fehler.

Hinweise

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

Die IoCsqInsertIrpEx-Routine ruft CsqInsertIrpEx auf, um den IRP in die Warteschlange einzufügen. Der InsertContext-Parameter von IoCsqInsertIrpEx wird als InsertContext-Parameter von CsqInsertIrpEx übergeben.

Beispiele

Um eine CsqInsertIrpEx-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 CsqInsertIrpEx-Rückrufroutine mit dem Namen MyCsqInsertIrpExzu definieren, verwenden Sie den typ IO_CSQ_INSERT_IRP_EX, wie in diesem Codebeispiel gezeigt:

IO_CSQ_INSERT_IRP_EX MyCsqInsertIrpEx;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
NTSTATUS
 MyCsqInsertIrpEx(
    struct _IO_CSQ  *Csq,
    PIRP  Irp,
    PVOID  InsertContext
    )
  {
      // Function body
  }

Der IO_CSQ_INSERT_IRP_EX Funktionstyp ist in der Headerdatei Wdm.h 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_INSERT_IRP_EX 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

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp