AVCSTRM_SET_STATE

Der AVCSTRM_SET_STATE Funktionscode versetzt den angegebenen Stream in einen neuen Streamzustand.

E/A-Statusblock

Bei erfolgreicher Ausführung legtavcstrm.sysIrp-IoStatus.Status> auf STATUS_SUCCESS fest.

Mögliche Fehlerrückgabewerte sind:

Fehlerstatus BESCHREIBUNG
STATUS_DEVICE_REMOVED Das Gerät, das dem AVCSTRM_READ-Vorgang entspricht, ist nicht mehr vorhanden.
STATUS_CANCELLED Die Anforderung konnte nicht abgeschlossen werden.
STATUS_INVALID_PARAMETER Ein parameter, der im IRP angegeben ist, ist falsch.
STATUS_INSUFFICIENT_RESOURCES Es gab nicht genügend Systemressourcen, um die Anforderung abzuschließen.
STATUS_PENDING Die Anforderung wurde empfangen, erfordert jedoch eine weitere Verarbeitung. Die E/A-Vervollständigungsroutine verarbeitet die endgültige Antwort.

AVC_STREAM_REQUEST_BLOCK-Eingabe

SizeOfThisBlock, Version und Funktion
Verwenden Sie das Makro INIT_AVCSTRM_HEADER , um diese Member zu initialisieren. Übergeben Sie AVCSTRM_SET_STATE im Argument Request des Makros.

AVCStreamContext
Gibt den Datenstromkontext (Handle) an, der von einem früheren AVCSTRM_OPEN Aufruf zum Platzieren in einen neuen Streamzustand zurückgegeben wurde.

StreamState
Gibt den neuen Streamstatus an, in den der Stream eingefügt werden soll.

Ein Untereinheitstreiber muss zunächst eine IRP- und eine AVC_STREAM_REQUEST_BLOCK-Struktur zuordnen.

Als Nächstes sollte das Makro INIT_AVCSTRM_HEADER verwendet werden, um die AVC_STREAM_REQUEST_BLOCK-Struktur zu initialisieren und AVCSTRM_GET_STATE als Request-Argument an das Makro zu übergeben.

Als Nächstes legt der Untereinheitstreiber den AVCStreamContext-Member auf den Streamkontext (Handle) des Datenstroms fest, aus dem der Streamzustand abgerufen werden soll.

Um diese Anforderung zu senden, sendet eine Untereinheit eine IRP_MJ_INTERNAL_DEVICE_CONTROL IRP mit dem IoControlCode-Member des IRP, das auf IOCTL_AVCSTRM_CLASS festgelegt ist, und das Argument1-Element der IRP-Gruppe an die AVC_STREAM_REQUEST_BLOCK-Struktur, die den Datenstrom beschreibt, der in einen neuen Streamzustand versetzt werden soll.

Ein Untereinheitstreiber kann erwarten, dass dieser Befehl synchron ausgeführt wird. Das Ergebnis wird sofort ohne ausstehender Vorgang in avcstrm.syszurückgegeben.

Dieser Funktionscode muss unter IRQL = PASSIVE_LEVEL aufgerufen werden.

Kommentare

Diese Funktion verwendet den StreamState-Member der CommandData-Union in der AVC_STREAM_REQUEST_BLOCK-Struktur, wie unten gezeigt.

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
  union _tagCommandData {
    .
    .
    KSSTATE  StreamState;
    .
    .
  } CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

Anforderungen

Header: Deklariert in avcstrm.h. Schließen Sie avcstrm.h ein.

Weitere Informationen

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

KSSTATE

AVCSTRM_FUNCTION