Auf Englisch lesen

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

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

[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 der IRP erfolgreich eingefügt wurde, oder den entsprechenden Fehlercode beim Fehler.

Bemerkungen

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

Die IoCsqInsertIrpEx Routineaufrufe CsqInsertIrpEx, um das 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 zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückrufroutinen identifiziert, die Sie definieren. 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 CsqInsertIrpEx- Rückrufroutine zu definieren, die MyCsqInsertIrpExbenannt ist, verwenden Sie den IO_CSQ_INSERT_IRP_EX Typ, wie in diesem Codebeispiel gezeigt:

C++
IO_CSQ_INSERT_IRP_EX MyCsqInsertIrpEx;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

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

Der IO_CSQ_INSERT_IRP_EX 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_INSERT_IRP_EX 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-

CsqPeekNextIrp

CsqReleaseLock-

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp-

IoCsqInsertIrpEx-

IoCsqRemoveIrp

IoCsqRemoveNextIrp