AVCSTRM_ABORT_STREAMING

Der AVCSTRM_ABORT_STREAMING Funktionscode bricht alle ausstehenden Datenanforderungen ab und gibt die verwendeten Ressourcen frei.

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_ABORT_STREAMING 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.

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 Streams fest, um das Streaming abzubrechen.

Um diese Anforderung zu senden, sendet eine Untereinheit eine IRP_MJ_INTERNAL_DEVICE_CONTROL IRP, wobei das IoControlCode-Element des IRP auf IOCTL_AVCSTRM_CLASS festgelegt ist, und das Argument1-Element der IRP-Gruppe auf die AVC_STREAM_REQUEST_BLOCK-Struktur, die den abzubrechenden Streamingvorgang beschreibt.

Dieser Funktionscode muss bei PASSIVE_LEVEL aufgerufen werden. Wenn ein Daten-IRP abgebrochen wird, kann er bei DISPATCH_LEVEL ausgeführt werden. In diesem Fall sollte eine Untereinheit ein Arbeitselement starten und diese Funktion in ihrer Arbeitselementroutine aufrufen, die am PASSIVE_LEVEL ausgeführt wird.

Kommentare

Beachten Sie, dass diese Funktion alle Streaming-IRPs abbricht. Verwenden Sie IoCancelIrp, um eine einzelne IRP abzubrechen.

Eine Untereinheit sollte dies aufrufen, wenn das Zielgerät entfernt oder die ursprüngliche Daten-IRP abgebrochen wird, um den Streamvorgang zu beenden.

Diese Funktion verwendet kein Element der CommandData-Union in der AVC_STREAM_REQUEST_BLOCK-Struktur.

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

Anforderungen

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

Weitere Informationen

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_FUNCTION