Freigeben über


IO_CSQ_COMPLETE_CANCELED_IRP Rückruffunktion (wdm.h)

Die CsqCompleteCanceledIrp-Routine wird vom System verwendet, um dem Treiber zu signalisieren, dass er eine abgebrochene IRP abschließen kann.

Syntax

IO_CSQ_COMPLETE_CANCELED_IRP IoCsqCompleteCanceledIrp;

void IoCsqCompleteCanceledIrp(
  [in] PIO_CSQ Csq,
  [in] PIRP Irp
)
{...}

Parameter

[in] Csq

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

[in] Irp

Zeiger auf die abzubrechende IRP.

Rückgabewert

Keine

Bemerkungen

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

Das System ruft diese Routine auf, um eine abgebrochene IRP abzuschließen, die aus der Treiberwarteschlange entfernt wurde. Normalerweise rufen Treiber nur IoCompleteRequest für das IRP mit einer status von STATUS_CANCELLED auf.

Treiber müssen das IRP nicht aus der Warteschlange entfernen, bevor er als abgebrochen abgeschlossen wird. Das System ruft immer die CsqRemoveIrp-Routine der Warteschlange auf, um das IRP aus der Warteschlange zu entfernen, bevor CsqCompleteCanceledIrp aufgerufen wird.

Beispiele

Um eine CsqCompleteCanceledIrp-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückrufroutine identifiziert, die Sie definieren. 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 Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine CsqCompleteCanceledIrp-Rückrufroutine mit dem Namen MyCsqCompleteCanceledIrpzu definieren, verwenden Sie den typ IO_CSQ_COMPLETE_CANCELED_IRP, wie in diesem Codebeispiel gezeigt:

IO_CSQ_COMPLETE_CANCELED_IRP MyCsqCompleteCanceledIrp;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
VOID 
 MyCsqCompleteCanceledIrp(
    _In_ PIO_CSQ  Csq,
    _In_ PIRP  Irp
    )
  {
      // Function body
  }

Der IO_CSQ_COMPLETE_CANCELED_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_COMPLETE_CANCELED_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 Verhalten von Funktionen mit Anmerkungen.

Anforderungen

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

Weitere Informationen

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCompleteRequest

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp