AVCSTRM_WRITE
Der AVCSTRM_WRITE Funktionscode wird verwendet, um einen Datenpuffer zu übermitteln, der an den angegebenen Stream übertragen werden soll.
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 Vorgangs entspricht, ist nicht mehr vorhanden. |
STATUS_CANCELLED | Die Anforderung konnte nicht abgeschlossen werden. |
STATUS_INVALID_PARAMETER | Ein in der IRP angegebenen Parameter 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_WRITE im Argument Request des Makros.
AVCStreamContext
Gibt den Streamkontext (Handle) an, der von einem früheren AVCSTRM_OPEN Aufruf zurückgegeben wird, der das Ziel für den Datenschreibvorgang ist.
Pufferstruktur
Gibt den Puffer an, aus dem der Schreibvorgang Daten abrufen soll.
Ein Untereinheitstreiber muss zuerst 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_READ als Request-Argument an das Makro zu übergeben.
Als Nächstes legt der Untereinheitstreiber den AVCStreamContext-Member auf den Streamkontext (Handle) des Datenstroms fest, der das Ziel des Schreibdatenvorgangs ist. Schließlich legt der Untereinheitstreiber den BufferStruct-Member der CommandData-Union fest, der den Puffer beschreibt, aus dem der Schreibvorgang Daten abruft.
Um diese Anforderung zu senden, sendet eine Untereinheit eine IRP_MJ_INTERNAL_DEVICE_CONTROL IRP mit dem IoControlCode-Member des IRP auf IOCTL_AVCSTRM_CLASS und dem Argument1-Element der IRP-Gruppe auf die AVC_STREAM_REQUEST_BLOCK-Struktur, die den auszuführenden Schreibvorgang beschreibt.
Dieser Befehl wird asynchron abgeschlossen. Nach Abschluss wird die im IRP festgelegte E/A-Vervollständigungsroutine aufgerufen.
Dieser Funktionscode muss unter IRQL = PASSIVE_LEVEL aufgerufen werden.
Kommentare
Diese Funktion verwendet den BufferStruct-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 {
.
.
AVCSTRM_BUFFER_STRUCT BufferStruct;
.
.
} CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
Anforderungen
Header: Deklariert in avcstrm.h. Schließen Sie avcstrm.h ein.