Freigeben über


EVT_SPB_CONTROLLER_OTHER Rückruffunktion (spbcx.h)

Ein SPB-Controllertreiber EvtSpbControllerIoOther Ereignisrückruffunktion verarbeitet Geräte-E/A-Steuerungsanforderungen, die nicht von anderen Ereignisrückruffunktionen oder von der SPB-Frameworkerweiterung (SpbCx) 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 für das Framework-Geräteobjekt, das den SPB-Controller darstellt.

[in] Target

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

[in] Request

Die SPBREQUEST die E/A-Anforderung verarbeiten. Ihr SPB-Controllertreiber muss diese Anforderung abschließen. Weitere Informationen finden Sie in den Hinweisen.

[in] OutputBufferLength

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

[in] InputBufferLength

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

[in] IoControlCode

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

Rückgabewert

Nichts

Bemerkungen

SpbCx verwaltet die E/A-Warteschlange für den SPB-Controller. Wenn der SPB-Controllertreiber eine EvtSpbControllerIoOther Rückruffunktion registriert, ruft SpbCx diese Funktion auf, wenn eine Geräte-E/A-Steuerungsanforderung, die SpbCx nicht unterstützt, in der E/A-Warteschlange des Controllers eingeht. Der wert des Request Parameter ist ein Handle, das diese Anforderung kapselt. Der SPB-Controllertreiber muss diese Anforderung entweder durch Ausführen des angeforderten Vorgangs oder durch Zurückgeben eines Fehlerstatus abschließen. Wenn der Treiber die 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 Control Codes.

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

Die EvtSpbControllerIoOther Rückruffunktion ähnelt der EvtIoDeviceControl und verarbeitet IOCTLs auf ähnliche Weise. Allgemeine Informationen zur Behandlung von E/A-Anforderungen durch WDF-Treiber finden Sie unter Framework Request Objects.

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

Wenn eine E/A-Anforderung nicht sofort abgeschlossen werden kann, sollte die Rückruffunktion zurückgegeben werden, ohne darauf zu warten, dass der SPB-Controllertreiber die Verarbeitung der Anforderung abgeschlossen hat. Der SPB-Controllertreiber kann die Anforderung später asynchron abschließen.

Eine EvtSpbControllerIoOther--Funktion muss die Parameterwerte in den E/A-Steuerelementanforderungen überprüfen, die sie von Benutzermodusclients empfängt. Für alle EvtSpbXxx-Rückruffunktionen außer EvtSpbControllerIoOtherüberprüft SpbCx die Parameter des Benutzermodus, bevor sie die Funktion aufruft.

Rufen Sie zum Registrieren einer EvtSpbControllerIoOther Rückruffunktion 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 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 EvtSpbControllerIoOther Rückruffunktion zu definieren, die MyEvtSpbControllerIoOtherbenannt ist, 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 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_CONTROLLER_OTHER 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 IRQL <= DISPATCH_LEVEL aufgerufen.

Siehe auch

EvtIoDeviceControl

EvtSpbTargetConnect

SPBREQUEST-

SPBTARGET-

SpbControllerSetIoOther