Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die SPB_REQUEST_SEQUENCE_POSITION Enumeration gibt die Position einer E/A-Anforderung in der Liste der Übertragungen für eine E/A-Übertragungssequenzan.
Syntax
typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
SpbRequestSequencePositionInvalid,
SpbRequestSequencePositionSingle,
SpbRequestSequencePositionFirst,
SpbRequestSequencePositionContinue,
SpbRequestSequencePositionLast,
SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;
Konstanten
SpbRequestSequencePositionInvalidNur für die interne Verwendung. |
SpbRequestSequencePositionSingleEine Einzelübertragungs-E/A-Anforderung. Diese Anforderung ist entweder eine Lese- oder Schreibanforderung (IRP_MJ_READ oder IRP_MJ_WRITE), die nicht Teil einer Sequenz ist, oder es handelt sich um eine IOCTL_SPB_EXECUTE_SEQUENCE E/A-Steuerelementanforderung für eine Sequenz, die aus einer einzelnen Übertragung besteht. Der Controller sollte das Ziel vor dem Durchführen der Übertragung auswählen und das Ziel nach Abschluss der Übertragung freigeben. |
SpbRequestSequencePositionFirstDie erste E/A-Anforderung in einer Sequenz. Diese Anforderung ist die Lese- oder Schreibanforderung, die unmittelbar auf die Sperre (IOCTL_SPB_LOCK_CONTROLLER) E/A-Steuerungsanforderung folgt, die den Start der Sequenz signalisiert. Der Controller sollte das Ziel vor dem Ausführen dieser Übertragung auswählen, und das Ziel sollte nach Abschluss der Übertragung ausgewählt bleiben. |
SpbRequestSequencePositionContinueEine E/A-Anforderung in der Mitte einer Sequenz. Diese Anforderung ist eine Lese- oder Schreibanforderung, die weder die erste noch die letzte Übertragung in der Sequenz ist. In einigen Fällen kann die SPB-Frameworkerweiterung (SpbCx) die letzte Übertragung nicht identifizieren und die letzte Übertragung als SpbRequestSequencePositionContinue anstelle von SpbRequestSequencePositionLastidentifizieren. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise". Der Controller sollte das Ziel bereits ausgewählt haben, bevor er diese Übertragung startet, und das Ziel sollte nach Abschluss der Übertragung ausgewählt bleiben. |
SpbRequestSequencePositionLastDie letzte E/A-Anforderung in einer Sequenz. Diese Anforderung ist die Lese- oder Schreibanforderung, die unmittelbar vor der Entsperrung (IOCTL_SPB_UNLOCK_CONTROLLER) E/A-Steuerungsanforderung steht, die das Ende der Sequenz signalisiert. In einigen Fällen kann SpbCx die letzte Übertragung nicht identifizieren und beschrifte die letzte Übertragung als SpbRequestSequencePositionContinue anstelle von SpbRequestSequencePositionLast. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise". Der Controller sollte das Ziel bereits ausgewählt haben, bevor er diese Übertragung startet, und das Ziel nach Abschluss der Übertragung freigeben. |
SpbRequestSequencePositionMaxNur für die interne Verwendung. |
Bemerkungen
Ein Client (Peripherietreiber) des SPB-Controllers kann eine E/A-Übertragungssequenz ausführen, indem eine Reihe von Lese- und Schreibanforderungen an ein Zielgerät auf dem Bus gesendet wird. Jede Lese- oder Schreibanforderung in der Datenreihe belegt eine Position in der Liste der Übertragungen für die Sequenz. Die Werte in der SPB_REQUEST_SEQUENCE_POSITION Enumeration geben die relativen Positionen der Lese- und Schreibanforderungen in dieser Liste an.
Die SpbRequestGetParameters Methode ruft die SPB-spezifischen Parameterwerte aus einer E/A-Anforderung ab und schreibt sie in eine SPB_REQUEST_PARAMETERS Struktur. In diesen Parametern ist ein SPB_REQUEST_SEQUENCE_POSITION Enumerationswert enthalten, der die Position der E/A-Anforderung in der E/A-Übertragungssequenz angibt, von der sie Teil ist.
Wenn SpbRequestGetParameters aufgerufen wird, um den Positionswert einer E/A-Anforderung abzurufen, die nicht Teil einer Sequenz ist, weist diese Methode der Anforderung einen geeigneten SPB_REQUEST_SEQUENCE_POSITION Enumerationswert zu.
Für Lese- und Schreibanforderungen wird der Positionswert auf einen der folgenden Werte festgelegt: SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinueoder SpbRequestSequencePositionLast.
Wenn der Client eine einfache Lese- oder Schreibzugriffsanforderung (IRP_MJ_READ oder IRP_MJ_WRITE) sendet, die nicht Teil einer Sequenz ist, wird der Positionswert auf SpbRequestSequencePositionSinglefestgelegt.
Wenn der Client eine Sperranforderung (IOCTL_SPB_LOCK_CONTROLLER) sendet, um den Start einer Sequenz zu signalisieren, ist der Positionswert für die erste Übertragung (Lese- oder Schreibanforderung) in der Sequenz SpbRequestSequencePositionFirst, und der Positionswert für die verbleibenden Übertragungen in der Sequenz ist SpbRequestSequencePositionContinue. In diesem Fall kann SpbCx SpbRequestSequencePositionLast der letzten Übertragung nicht zuweisen, da er nicht weiß, dass der Client die letzte Lese- oder Schreibanforderung gesendet hat, bis der Client die Entsperrungsanforderung (IOCTL_SPB_UNLOCK_CONTROLLER) sendet, die die Sequenz beendet.
Bei Sperranforderungen wird der Positionswert auf SpbRequestSequencePositionFirstfestgelegt. Bei Entsperrungsanforderungen wird der Positionswert auf SpbRequestSequencePositionLastfestgelegt.
Einige Controller unterstützen möglicherweise spezielle Vorgänge, z. B. Vollduplexbusübertragungen, die gleichzeitig von einem Zielgerät gelesen und in ein Zielgerät geschrieben werden. Ein Client kann einen benutzerdefinierten Sequenzvorgang ausführen, indem er den Controller sperrt und eine Reihe benutzerdefinierter E/A-Anforderungen sendet, die SpbCx an die EvtSpbControllerIoOther Rückruffunktion des SPB-Controllertreibers übergibt. In diesem Fall ist der Positionswert für die erste benutzerdefinierte E/A-Anforderung in der Sequenz SpbRequestSequencePositionFirst, und der Positionswert für die verbleibenden benutzerdefinierten E/A-Anforderungen in der Sequenz ist SpbRequestSequencePositionContinue. Die Sequenz endet, wenn der Client den Controller entsperrt. Wenn die EvtSpbControllerIoOther Rückruffunktion eine benutzerdefinierte E/A-Anforderung empfängt, die nicht Teil einer Sequenz ist, ist der Positionswert für diese Anforderung SpbRequestSequencePositionSingle.
Für einen Positionswert von SpbRequestSequencePositionLastkann das Length Member der SPB_REQUEST_PARAMETERS Struktur 0 sein, um anzugeben, dass das Ziel einfach losgelassen werden soll und dass keine E/A-Daten übertragen werden sollen (oder entsprechend, um anzugeben, dass eine 0-Byte-Übertragung erfolgen soll, wenn der Controller das Gerät nicht freigeben kann, ohne die Uhr auszuführen).
Bei Positionswerten von SpbRequestSequencePositionContinue und SpbRequestSequencePositionLasthat sich die Übertragungsrichtung möglicherweise von der vorherigen Übertragung geändert, und der SPB-Controllertreiber muss möglicherweise diese mögliche Richtungsänderung auf dem Bus angeben (z. B. ein I2C-Controller gibt eine neue START-Bedingung aus). Weitere Informationen zu Wegbeschreibungen finden Sie unter SPB_TRANSFER_DIRECTION.
Anforderungen
| Anforderung | Wert |
|---|---|
| mindestens unterstützte Client- | Wird ab Windows 8 unterstützt. |
| Header- | spbcx.h (include Spb.h) |