Freigeben über


EVT_SPB_CONTROLLER_WRITE Rückruffunktion (spbcx.h)

Die EvtSpbControllerIoWrite Ereignisrückruffunktion eines SPB-Controllertreibers schreibt Daten aus den Puffern, die mit der Schreibanforderung bereitgestellt werden, in das angegebene Zielgerät.

Syntax

EVT_SPB_CONTROLLER_WRITE EvtSpbControllerWrite;

void EvtSpbControllerWrite(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST Request,
  [in] size_t Length
)
{...}

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

Eine SPBREQUEST Handle für die E/A-Anforderung. Ihr SPB-Controllertreiber muss diese Anforderung entweder durch Ausführen des angeforderten Vorgangs oder durch Zurückgeben eines Fehlerstatus abschließen. Weitere Informationen finden Sie unter Anmerkungen.

[in] Length

Die Anzahl der Bytes, die auf das Zielgerät geschrieben werden sollen.

Rückgabewert

Nichts

Bemerkungen

SpbCx verwaltet die E/A-Warteschlange für den SPB-Controller. SpbCx ruft die EvtSpbControllerIoWrite Rückruffunktion auf, wenn ein Client (Peripherietreiber) des SPB-Controllers eine IRP_MJ_WRITE Anforderung an ein Zielgerät sendet, das an den Bus angeschlossen ist. Der wert des Request Parameter ist ein Handle, das diese Anforderung kapselt.

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

Ein EvtSpbControllerIoWrite Rückruf ist asynchron. Das heißt, die Rückruffunktion sollte den angeforderten Schreibvorgang initiieren und dann zurückgeben, ohne auf den Abschluss des Vorgangs zu warten. Später schließt der SPB-Controllertreiber die Schreibanforderung während eines Interrupt-DPC oder eines Timers DPC ab.

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

Wenn der Schreibvorgang vollständig abgeschlossen ist, sollte die Rückruffunktion den Abschlussstatus auf STATUS_SUCCESS festlegen. Wenn das Zielgerät angibt, dass es keine weiteren Daten akzeptieren kann, bevor eine Übertragung abgeschlossen ist, sollte der Treiber den Abschlussstatus auf STATUS_SUCCESS festlegen und die Anzahl der übertragenen Bytes angeben.

Wenn während des Schreibvorgangs ein Übertragungsfehler auftritt, sollte der Treiber den Abschlussstatus in der E/A-Anforderung auf einen entsprechenden Fehlercode festlegen. Nicht alle Busse bieten einen Mechanismus für ein Zielgerät, um einen Transportfehler oder eine teilweise abgeschlossene Übertragung zu melden, und nicht alle Controller können diese Bedingungen erkennen.

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

Beispiele

Um eine EvtSpbControllerIoWrite 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 EvtSpbControllerIoWrite Rückruffunktion zu definieren, die MyEvtSpbControllerIoWritebenannt ist, verwenden Sie den EVT_SPB_CONTROLLER_WRITE Funktionstyp, wie in diesem Codebeispiel gezeigt:

EVT_SPB_CONTROLLER_WRITE  MyEvtSpbControllerIoWrite;

Implementieren Sie dann die Rückruffunktion wie folgt:

_Use_decl_annotations_
VOID
  MyEvtSpbControllerIoWrite(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST Request,
    size_t Length
    )
{ ... }

Der EVT_SPB_CONTROLLER_WRITE 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 EVT_SPB_CONTROLLER_WRITE Funktionstyp 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