AVCSTRM_READ
Der AVCSTRM_READ Funktionscode wird verwendet, um einen Datenpuffer avcstrm.sys zu übermitteln, der mit Daten aus dem angegebenen Stream gefüllt ist.
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_READ im Argument Request des Makros.
AVCStreamContext
Gibt den Datenstromkontext (Handle) an, der von einem früheren aufruf AVCSTRM_OPEN zurückgegeben wurde, der die Datenquelle für den Lesevorgang ist.
BufferStruct
Gibt den Puffer an, in den der Lesevorgang Daten platzieren 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_READ als Argument Request an das Makro zu übergeben.
Als Nächstes legt der Untereinheitstreiber den AVCStreamContext-Member auf den Streamkontext (Handle) des Datenstroms fest, der die zu lesenden Daten bereitstellt. Schließlich legt der Untereinheitstreiber den BufferStruct-Member der CommandData-Union fest, der den Puffer beschreibt, in den der Lesevorgang Daten platziert.
Um diese Anforderung zu senden, sendet eine Untereinheit eine IRP_MJ_INTERNAL_DEVICE_CONTROL IRP mit dem IoControlCode-Element des IRP, das auf IOCTL_AVCSTRM_CLASS festgelegt ist, und das Argument1-Element des IRP-Elements an die AVC_STREAM_REQUEST_BLOCK-Struktur, die den durchzuführenden Lesevorgang 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.