Freigeben über


AVCSTRM_CLOSE

Der AVCSTRM_CLOSE Funktionscode schließt den angegebenen Stream und gibt alle ressourcen frei, die in AVCSTRM_OPEN zugeordnet sind.

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_CLOSE im Argument Request des Makros.

AVCStreamContext
Gibt den Streamkontext (Handle) des zu schließenden Streams an. Wenn AVCSTRM_CLOSE erfolgreich zurückgibt, ist dieser Wert nicht mehr gültig.

Im Folgenden finden Sie ein Beispiel für die Angabe des zu schließenden Streams:

    pAVCStrmReq = &pStrmExt->AVCStrmReq;
    RtlZeroMemory(pAVCStrmReq, sizeof(AVC_STREAM_REQUEST_BLOCK));
    INIT_AVCSTRM_HEADER(pAVCStrmReq, AVCSTRM_CLOSE);

    pAVCStrmReq->AVCStreamContext = pStrmExt->AVCStreamContext;

    Status = 
        AVCStrmReqSubmitIrpSynch ( 
            pDevExt->pBusDeviceObject,
            pStrmExt->pIrpReq,
            pAVCStrmReq
            );

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_CLOSE als Request-Argument an das Makro zu übergeben.

Als Nächstes legt der Untereinheitstreiber den AVCStreamContext-Member auf den zu schließenden Stream fest.

Um diese Anforderung zu senden, übermittelt 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 der IRP-Gruppe an die AVC_STREAM_REQUEST_BLOCK-Struktur, die den durchzuführenden Close-Vorgang beschreibt.

Ein Untereinheitstreiber kann erwarten, dass dieser Befehl synchron abgeschlossen 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 AVCStreamContext-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;
  .
  .
} 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

AVCSTRM_FUNCTION