Freigeben über


EVT_SPB_CONTROLLER_UNLOCK Rückruffunktion (spbcx.h)

Die EvtSpbControllerUnlock-Ereignisrückruffunktion eines SPB-Controllertreibers entsperrt den SPB-Controller, der durch einen vorherigen Aufruf der EvtSpbControllerLock-Ereignisrückruffunktion gesperrt wurde.

Syntax

EVT_SPB_CONTROLLER_UNLOCK EvtSpbControllerUnlock;

void EvtSpbControllerUnlock(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST UnlockRequest
)
{...}

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 Ziel für diese E/A-Anforderung. 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.

[in] UnlockRequest

Ein SPBREQUEST-Handle für eine E/A-Steuerungsanforderung zum Entsperren des Controllers. Ihr SPB-Controllertreiber muss diese Anforderung entweder durch Ausführen des angeforderten Vorgangs oder durch Zurückgeben eines Fehlers status abschließen. Weitere Informationen finden Sie unter Hinweise.

Rückgabewert

Keine

Bemerkungen

SpbCx verwaltet die E/A-Warteschlange für den SPB-Controller. SpbCx ruft diese Funktion auf, wenn ein Client (Peripherietreiber) des Controllers eine IOCTL_SPB_UNLOCK_CONTROLLER-Anforderung an ein Ziel im Bus sendet. Der UnlockRequest-Parameterwert ist ein Handle, das diese Anforderung kapselt.

Die Funktionen EvtSpbControllerLock und EvtSpbControllerUnlock führen ergänzende Vorgänge aus. Beide Funktionen sind optional. Wenn Ihr SPB-Controllertreiber eine EvtSpbControllerUnlock-Funktion implementiert, muss der Treiber keine EvtSpbControllerLock-Funktion implementieren, kann dies jedoch tun. Wenn ihr SPB-Controllertreiber jedoch eine EvtSpbControllerLock-Funktion implementiert, muss er auch eine EvtSpbControllerUnlock-Funktion implementieren. Weitere Informationen finden Sie unter Hinweise in SPB_CONTROLLER_CONFIG.

Wenn der SPB-Controllertreiber den Modus seines Controllers ändern muss, um die normale Zielauswahl wiederherzustellen, kann er dies während des EvtSpbControllerUnlock-Rückrufs tun. Wenn dieser Moduswechsel mit einer langen Verzögerung verbunden ist oder der Treiber auf einen Geräteunterbrechung warten muss, sollte der Treiber die Modusänderung initiieren und dann ohne Verzögerung vom Rückruf zurückkehren. Später kann der Treiber die Entsperranforderung in einem Interrupt-DPC oder einem Timer-DPC abschließen.

Ein EvtSpbControllerUnlock-Rückruf muss verhindern, dass eine Entsperranforderung fehlschlägt. Wenn die Treiberüberprüfung aktiviert ist, löst ein solcher Fehler eine Prüferfalle aus, die dem Plug & Play-Manager meldet, dass der Controller fehlgeschlagen ist. SpbCx ignoriert den Fehler einer Entsperranforderung und versucht nicht, den Fehler zu behandeln oder zu beheben.

Die EvtSpbControllerUnlock-Funktion gibt keinen Wert zurück. Stattdessen gibt der SPB-Controllertreiber die status des Entsperrvorgangs im Abschluss status der E/A-Anforderung an, die durch den UnlockRequest-Parameter identifiziert wird. Legen Sie die status für die Vervollständigung auf STATUS_SUCCESS fest.

Um eine EvtSpbControllerUnlock-Rückruffunktion zu registrieren, rufen Sie die SpbDeviceInitialize-Methode auf .

Weitere Informationen zur EvtSpbControllerUnlock-Funktion finden Sie unter Behandeln Client-Implemented Sequenzen.

Beispiele

Um eine EvtSpbControllerUnlock-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 EvtSpbControllerUnlock-Rückruffunktion namens MyEvtSpbControllerUnlockzu definieren, verwenden Sie den Funktionstyp EVT_SPB_CONTROLLER_UNLOCK, wie in diesem Codebeispiel gezeigt:

EVT_SPB_CONTROLLER_UNLOCK  MyEvtSpbControllerUnlock;

Implementieren Sie dann Ihre Rückruffunktion wie folgt:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerUnlock(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST UnlockRequest
    )
{ ... }

Der EVT_SPB_CONTROLLER_UNLOCK 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_CONTROLLER_UNLOCK 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 IRQL <= DISPATCH_LEVEL aufgerufen.

Weitere Informationen