EVT_SPB_CONTROLLER_OTHER Rückruffunktion (spbcx.h)

Eine SPB-Controller-Treiber-EvtSpbControllerIoOther-Ereignisanruffunktion behandelt Geräte-I/O-Steuerelementanforderungen, die von anderen Ereignisanruffunktionen oder von der SPB-Frameworkerweiterung (SpbCx) nicht behandelt werden.

Syntax

EVT_SPB_CONTROLLER_OTHER EvtSpbControllerOther;

void EvtSpbControllerOther(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Parameter

[in] Controller

Ein WDFDEVICE-Handle zum Framework-Geräteobjekt , das den SPB-Controller darstellt.

[in] Target

Ein SPBTARGET-Handle zum Ziel für diese I/O-Anforderung. Das Ziel ist ein Peripheriegerät oder Port, der 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] Request

Das SPBREQUEST-Handle an die I/O-Anforderung. Ihr SPB-Controllertreiber muss diese Anforderung abschließen. Weitere Informationen finden Sie in den Hinweisen.

[in] OutputBufferLength

Die Länge in Bytes des Ausgabepuffers, wenn ein Ausgabepuffer mit der Anforderung bereitgestellt wird.

[in] InputBufferLength

Die Länge in Bytes des Eingabepuffers, wenn ein Eingabepuffer mit der Anforderung bereitgestellt wird.

[in] IoControlCode

Der I/O-Steuerelementcode (IOCTL) für die Anforderung. Dieser Wert ist eine IOCTL, die die SPB-Frameworkerweiterung (SpbCx) nicht erkennt. Weitere Informationen finden Sie in den Hinweisen.

Rückgabewert

Keine

Bemerkungen

SpbCx verwaltet die I/O-Warteschlange für den SPB-Controller. Wenn der SPB-Controllertreiber eine EvtSpbControllerIoOther-Rückruffunktion registriert, ruft SpbCx diese Funktion auf, wenn eine Geräte-I/O-Steuerelementanforderung, die SpbCx nicht unterstützt, nicht in der I/O-Warteschlange des Controllers angezeigt wird. Der Parameterwert "Anforderung" ist ein Handle, der diese Anforderung kapselt. Der SPB-Controllertreiber muss diese Anforderung entweder durch Ausführen des angeforderten Vorgangs ausführen oder einen Fehlerstatus zurückgeben. Wenn der Treiber das angegebene IOCTL nicht unterstützt, sollte der Treiber den STATUS_NOT_SUPPORTED Fehlerstatus zurückgeben. Eine Liste der IOCTLs, die SpbCx unterstützt, finden Sie unter SpbCx I/O-Steuerelementcodes.

Der EvtSpbControllerIoOther-Rückruf ermöglicht busspezifische oder treiberspezifische Befehle, die als IOCTLs an den SPB-Controllertreiber verteilt werden. Beispielsweise können Clients (Peripherietreiber) diese IOCTLs verwenden, um busspezifische Vorgänge zu koordinieren, z. B. Vollduplexdatenaustausch mit einem Zielgerät auf einem SPI-Bus. Solche IOCTLs unterliegen derselben Flusssteuerung wie die IOCTLs, die von SpbCx unterstützt werden.

Die EvtSpbControllerIoOther-Rückruffunktion ähnelt dem EvtIoDeviceControl und verarbeitet IOCTLs auf ähnliche Weise. Allgemeine Informationen dazu, wie WDF-Treiber I/O-Anforderungen behandeln, finden Sie unter Framework-Anforderungsobjekte.

Ein EvtSpbControllerIoOther-Rückruf gibt keinen Statuswert zurück. Stattdessen gibt der SPB-Controllertreiber den Status des angeforderten Vorgangs im Abschlussstatus für die I/O-Anforderung an.

Wenn eine I/O-Anforderung nicht sofort abgeschlossen werden kann, sollte die Rückruffunktion ohne Warten auf den SPB-Controllertreiber zurückkehren, um die Verarbeitung der Anforderung abzuschließen. Der SPB-Controllertreiber kann die Anforderung später asynchron abschließen.

Eine EvtSpbControllerIoOther-Funktion muss die Parameterwerte in den I/O-Steuerelementanforderungen überprüfen, die sie von Benutzermodusclients empfängt. Für alle EvtSpbXxx-Rückruffunktionen außer EvtSpbControllerIoOther überprüft SpbCx die Benutzermodusparameter, bevor die Funktion aufgerufen wird.

Um eine EvtSpbControllerIoOther-Rückruffunktion zu registrieren, rufen Sie die SpbControllerSetIoOther-Methode auf.

Beispiele

Um eine EvtSpbControllerIoOther-Rückruffunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der Rückruffunktion identifiziert, die Sie definieren. Windows stellt einen Satz von Rückruffunktionstypen für Treiber bereit. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft bei der Codeanalyse für Treiber, statischer Treiberüberprüfung (SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung für das Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine EvtSpbControllerIoOther-Rückruffunktion zu definieren, die benannt MyEvtSpbControllerIoOtherwird, verwenden Sie den EVT_SPB_CONTROLLER_OTHER Funktionstyp, wie in diesem Codebeispiel gezeigt:

EVT_SPB_CONTROLLER_OTHER  MyEvtSpbControllerIoOther;

Implementieren Sie dann die Rückruffunktion wie folgt:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoOther(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t OutputBufferLength,
    size_t InputBufferLength,
    ULONG IoControlCode
    )
{ ... }

Der EVT_SPB_CONTROLLER_OTHER Funktionstyp wird in der Spbcx.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie die Use_decl_annotations Anmerkungen zu Ihrer Funktionsdefinition hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den EVT_SPB_CONTROLLER_OTHER Funktionstyp in der Kopfzeilendatei angewendet werden, 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 Annotieren von Funktionsverhalten.

Anforderungen

   
Unterstützte Mindestversion (Client) Unterstützt ab Windows 8.
Zielplattform Power BI Desktop
Header spbcx.h
IRQL Aufgerufen bei IRQL <= DISPATCH_LEVEL.

Weitere Informationen

EvtIoDeviceControl

EvtSpbTargetConnect

SPBREQUEST

SPBTARGET

SpbControllerSetIoOther