EVT_SPB_CONTROLLER_OTHER Rückruffunktion (spbcx.h)
Die EvtSpbControllerIoOther-Ereignisrückruffunktion eines SPB-Controllertreibers verarbeitet Geräte-E/A-Steuerelementanforderungen, die nicht von anderen Ereignisrückruffunktionen oder von der SPB-Frameworkerweiterung (SpbCx) verarbeitet 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
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] Request
Das SPBREQUEST-Handle für die E/A-Anforderung. Ihr SPB-Controllertreiber muss diese Anforderung erfüllen. 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 E/A-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
Keine
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 Request-Parameterwert 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 Fehlers status ausführen. Wenn der Treiber die angegebene IOCTL nicht unterstützt, sollte der Treiber den STATUS_NOT_SUPPORTED Fehler status zurückgeben. Eine Liste der von SpbCx unterstützten IOCTLs finden Sie unter SpbCx-E/A-Steuerungscodes.
Der EvtSpbControllerIoOther-Rückruf ermöglicht die Verteilung busspezifischer oder treiberspezifischer Befehle an den SPB-Controllertreiber als IOCTLs. Beispielsweise können Clients (Peripherietreiber) diese IOCTLs verwenden, um busspezifische Vorgänge zu koordinieren, z. B. den Vollduplexdatenaustausch mit einem Zielgerät auf einem SPI-Bus. Solche IOCTLs unterliegen der gleichen Flusssteuerung wie die von SpbCx unterstützten IOCTLs.
Die Rückruffunktion EvtSpbControllerIoOther ähnelt dem EvtIoDeviceControl und verarbeitet IOCTLs auf ähnliche Weise. Allgemeine Informationen zur Verarbeitung von E/A-Anforderungen durch WDF-Treiber finden Sie unter Framework-Anforderungsobjekte.
Ein EvtSpbControllerIoOther-Rückruf gibt keinen status Wert zurück. Stattdessen gibt der SPB-Controllertreiber die status des angeforderten Vorgangs in der status 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 Clients im Benutzermodus 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 zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückruffunktion identifiziert. 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 Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine EvtSpbControllerIoOther-Rückruffunktion namens MyEvtSpbControllerIoOther
zu definieren, verwenden Sie den EVT_SPB_CONTROLLER_OTHER Funktionstyp, wie in diesem Codebeispiel gezeigt:
EVT_SPB_CONTROLLER_OTHER MyEvtSpbControllerIoOther;
Implementieren Sie dann Ihre 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 ist in der Headerdatei Spbcx.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den EVT_SPB_CONTROLLER_OTHER 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 Verhalten von Funktionen mit Anmerkungen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Wird ab Windows 8 unterstützt. |
Zielplattform | Desktop |
Kopfzeile | spbcx.h |
IRQL | Wird unter IRQL <= DISPATCH_LEVEL aufgerufen. |