IO_CSQ_COMPLETE_CANCELED_IRP Rückruffunktion (wdm.h)
Die CsqCompleteCanceledIrp Routine wird vom System verwendet, um dem Treiber zu signalisieren, dass ein abgebrochenes IRP abgeschlossen werden 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 Warteschlange mit abbruchsicheren IRP-Adressen.
[in] Irp
Zeiger auf den IRP, der abgebrochen werden soll.
Rückgabewert
Nichts
Bemerkungen
Der Treiber gibt die CsqCompleteCanceledIrp Routine für eine abbruchsichere IRP-Warteschlange an, wenn sie die IO_CSQ Struktur der Warteschlange initialisiert. Der Treiber gibt die Routine als CsqCompleteCanceledIrp Parameter von IoCsqInitialize oder IoCsqInitializeEx an, wenn er IO_CSQinitialisiert. Weitere Informationen finden Sie unter Cancel-Safe IRP Queues.
Das System ruft diese Routine auf, um ein abgebrochenes IRP abzuschließen, das aus der Treiberwarteschlange entfernt wurde. Normalerweise rufen Treiber einfach IoCompleteRequest- für das IRP mit dem Status STATUS_CANCELLED auf.
Treiber müssen die IRP nicht aus der Warteschlange entfernen, bevor sie abgebrochen werden: Das System ruft immer die CsqRemoveIrp Routine der Warteschlange auf, um das IRP aus der Warteschlange zu entfernen, bevor CsqCompleteCanceledIrpaufgerufen wird.
Beispiele
Um eine CsqCompleteCanceledIrp 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 CsqCompleteCanceledIrp- Rückrufroutine zu definieren, die MyCsqCompleteCanceledIrp
heißt, verwenden Sie den IO_CSQ_COMPLETE_CANCELED_IRP Typ, 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 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_COMPLETE_CANCELED_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) |