Freigeben über


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 zum Schließen des Ziels. Das Ziel ist ein Peripheriegerät oder port, das an den Bus angeschlossen ist. Die SPB-Frameworkerweiterung (SpbCx) hat diesem Handle zuvor im EvtSpbTargetConnect Rückruf zugewiesen, der die Verbindung mit dem Ziel geöffnet hat.

Rückgabewert

Nichts

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 sendet, um ein SPBTARGET-Handle zu schließen. Dieses Handle stellt eine Verbindung mit einem Zielgerät auf dem Bus dar, die 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 clientinitiierten 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ächsten niedrigeren Treiber in der E/A-Anforderungskette für das Zielgerät gesendet hat, sollte die EvtSpbTargetDisconnect-Funktion diese Anforderungen abbrechen, bevor sie zurückgegeben werden.

Die DispatchCleanup eines Clienttreibers und CreateProcessNotifyEx- Rückrufroutinen können jederzeit aufgerufen werden, nachdem die EvtSpbTargetDisconnect Rückruf zurückgegeben wurde. Wenn der Prozess des Clienttreibers beendet wird, wird die CreateProcessNotifyEx- Routine unmittelbar vor dem letzten Thread aufgerufen, um den Prozess zu beenden.

Rufen Sie zum Registrieren einer EvtSpbTargetDisconnect Rückruffunktion die SpbDeviceInitialize-Methode auf.

Beispiele

Um eine EvtSpbTargetDisconnect Rückruffunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückruffunktion 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 EvtSpbTargetDisconnect Rückruffunktion zu definieren, die MyEvtSpbTargetDisconnectbenannt ist, verwenden Sie den EVT_SPB_TARGET_DISCONNECT Funktionstyp, wie in diesem Codebeispiel gezeigt:

EVT_SPB_TARGET_DISCONNECT  MyEvtSpbTargetDisconnect;

Implementieren Sie dann die Rückruffunktion wie folgt:

_Use_decl_annotations_
VOID
  MyEvtSpbTargetDisconnect(
    WDFDEVICE Controller,
    SPBTARGET Target
    )
{ ... }

Der EVT_SPB_TARGET_DISCONNECT Funktionstyp wird in der Headerdatei "Spbcx.h" 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 EVT_SPB_TARGET_DISCONNECT 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 KMDF-Treiber. Weitere Informationen zu Use_decl_annotationsfinden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Wird ab Windows 8 unterstützt.
Zielplattform- Desktop
Header- spbcx.h
IRQL- Wird bei PASSIVE_LEVEL aufgerufen.

Siehe auch

EvtSpbTargetConnect

IRP_MJ_CLOSE

IRP_MJ_CREATE

SPBTARGET-

SpbDeviceInitialize