EVT_SPB_TARGET_DISCONNECT Rückruffunktion (spbcx.h)
Die EvtSpbTargetDisconnect-Ereignisrückruffunktion eines SPB-Controllertreibers schließt eine Verbindung mit einem Zielgerät, das zuvor durch einen Aufruf der EvtSpbTargetConnect-Ereignisrückruffunktion des Treibers geöffnet wurde.
Syntax
EVT_SPB_TARGET_DISCONNECT EvtSpbTargetDisconnect;
void EvtSpbTargetDisconnect(
[in] WDFDEVICE Controller,
[in] SPBTARGET Target
)
{...}
Parameter
[in] Controller
Ein WDFDEVICE-Handle für das Framework-Geräteobjekt , das den SPB-Controller darstellt.
[in] Target
Ein SPBTARGET-Handle für das zu schließende Ziel. Das Ziel ist ein Peripheriegerät oder ein Port, das an den Bus angeschlossen ist. Die SPB-Frameworkerweiterung (SpbCx) hat dieses Handle zuvor dem Ziel im EvtSpbTargetConnect-Rückruf zugewiesen, der die Verbindung mit dem Ziel geöffnet hat.
Rückgabewert
Keine
Bemerkungen
Die Implementierung dieser Funktion durch den SPB-Controllertreiber ist optional.
SpbCx verwaltet die E/A-Warteschlange für den SPB-Controller. Wenn der SPB-Controllertreiber eine EvtSpbTargetDisconnect-Rückruffunktion registriert, ruft SpbCx diese Funktion auf, wenn ein Client (Peripherietreiber) des Controllertreibers eine IRP_MJ_CLOSE Anforderung zum Schließen eines SPBTARGET-Handles sendet. Dieses Handle stellt eine Verbindung mit einem Zielgerät auf dem Bus dar, das der Client in einer vorherigen IRP_MJ_CREATE-Anforderung geöffnet hat. Wenn die EvtSpbTargetDisconnect-Funktion einen Fehlercode zurückgibt, schlägt SpbCx die IRP_MJ_CLOSE-Anforderung fehl.
Die EvtSpbTargetDisconnect-Funktion wird synchron aus dem Kontext des schließenden Threads des Clients aufgerufen, nachdem alle vom Client initiierten E/A-Vorgänge beendet wurden und nachdem der Client den Controller entsperrt hat (wenn der Client den Controller zuvor gesperrt hat).
Wenn der SPB-Controllertreiber E/A-Anforderungen zugewiesen und an den nächstniedrigen Treiber in der E/A-Anforderungskette für das Zielgerät gesendet hat, sollte die EvtSpbTargetDisconnect-Funktion diese Anforderungen abbrechen, bevor sie zurückgegeben wird.
Die Rückrufroutinen DispatchCleanup und CreateProcessNotifyEx eines Clienttreibers können jederzeit aufgerufen werden, nachdem der EvtSpbTargetDisconnect-Rückruf zurückgegeben wurde. Wenn der Prozess des Clienttreibers beendet wird, wird die CreateProcessNotifyEx-Routine aufgerufen, bevor der letzte Thread zum Beenden des Prozesses zerstört wird.
Um eine EvtSpbTargetDisconnect-Rückruffunktion zu registrieren, rufen Sie die SpbDeviceInitialize-Methode auf .
Beispiele
Um eine EvtSpbTargetDisconnect-Rückruffunktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückruffunktion 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 EvtSpbTargetDisconnect-Rückruffunktion mit dem Namen MyEvtSpbTargetDisconnect
zu definieren, verwenden Sie den funktionstyp EVT_SPB_TARGET_DISCONNECT, wie in diesem Codebeispiel gezeigt:
EVT_SPB_TARGET_DISCONNECT MyEvtSpbTargetDisconnect;
Implementieren Sie dann Ihre Rückruffunktion wie folgt:
_Use_decl_annotations_
VOID
MyEvtSpbTargetDisconnect(
WDFDEVICE Controller,
SPBTARGET Target
)
{ ... }
Der EVT_SPB_TARGET_DISCONNECT Funktionstyp ist in der Spbcx.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, müssen Sie der Funktionsdefinition die anmerkung Use_decl_annotations hinzufügen. Die Use_decl_annotations-Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den EVT_SPB_TARGET_DISCONNECT 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 KMDF-Treiber. Weitere Informationen zu Use_decl_annotations finden Sie unter Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Unterstützt ab Windows 8. |
Zielplattform | Desktop |
Kopfzeile | spbcx.h |
IRQL | Wird unter PASSIVE_LEVEL aufgerufen. |