Condividi tramite


AVCSTRM_CLOSE

Il codice della funzione AVCSTRM_CLOSE chiude il flusso specificato e libera tutte le risorse allocate in AVCSTRM_OPEN.

Blocco dello stato I/O

In caso di esito positivo, avcstrm.sys imposta Irp-IoStatus.Status> su STATUS_SUCCESS.

I valori restituiti di errore possibili includono:

Stato errore Descrizione
STATUS_DEVICE_REMOVED Il dispositivo corrispondente all'operazione di AVCSTRM_READ non esiste più.
STATUS_CANCELLED Impossibile completare la richiesta.
STATUS_INVALID_PARAMETER Un parametro specificato in IRP non è corretto.
STATUS_INSUFFICIENT_RESOURCES Non sono state necessarie risorse di sistema sufficienti per completare la richiesta.
STATUS_PENDING La richiesta è stata ricevuta ma richiede un'ulteriore elaborazione. La routine di completamento di I/O gestirà la risposta finale.

AVC_STREAM_REQUEST_BLOCK Input

SizeOfThisBlock, versione e funzione
Utilizzare la macro INIT_AVCSTRM_HEADER per inizializzare questi membri. Passare AVCSTRM_CLOSE nell'argomento Request della macro.

AVCStreamContext
Specifica il contesto del flusso (handle) del flusso da chiudere. Se AVCSTRM_CLOSE viene restituito correttamente, questo valore non è più valido.

Di seguito è riportato un esempio di come specificare il flusso da chiudere:

    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
            );

Un driver subunit deve prima allocare un IRP e una struttura AVC_STREAM_REQUEST_BLOCK .

Successivamente, deve utilizzare la macro INIT_AVCSTRM_HEADER per inizializzare la struttura AVC_STREAM_REQUEST_BLOCK, passando AVCSTRM_CLOSE come argomento Request alla macro.

Successivamente, il driver subunit imposta il membro AVCStreamContext sul flusso da chiudere.

Per inviare questa richiesta, una subunit invia un IRP_MJ_INTERNAL_DEVICE_CONTROL IRP con il membro IoControlCode dell'IRP impostato su IOCTL_AVCSTRM_CLASS e il membro Argument1 dell'IRP impostato sulla struttura AVC_STREAM_REQUEST_BLOCK che descrive l'operazione di chiusura da eseguire.

Un driver subunit può aspettarsi che questo comando venga completato in modo sincrono. Il risultato restituisce immediatamente senza operazioni in sospeso in avcstrm.sys.

Questo codice di funzione deve essere chiamato in IRQL = PASSIVE_LEVEL.

Commenti

Questa funzione usa il membro AVCStreamContext dell'unione CommandData nella struttura AVC_STREAM_REQUEST_BLOCK, come illustrato di seguito.

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

Requisiti

Intestazioni: Dichiarato in avcstrm.h. Includere avcstrm.h.

Vedere anche

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_FUNCTION