Compartir a través de


AVCSTRM_CLOSE

El código de función AVCSTRM_CLOSE cierra la secuencia especificada y libera los recursos asignados en AVCSTRM_OPEN.

Bloque de estado de entrada/salida

Si se ejecuta correctamente, avcstrm.sys establece Irp-IoStatus.Status> en STATUS_SUCCESS.

Entre los posibles valores devueltos de error se incluyen:

Estado del error Descripción
STATUS_DEVICE_REMOVED El dispositivo correspondiente a la operación de AVCSTRM_READ ya no existe.
STATUS_CANCELLED No se pudo completar la solicitud.
STATUS_INVALID_PARAMETER Un parámetro especificado en irP es incorrecto,
STATUS_INSUFFICIENT_RESOURCES No había suficientes recursos del sistema para completar la solicitud.
STATUS_PENDING La solicitud se ha recibido, pero requiere un procesamiento adicional. La rutina de finalización de E/S controlará la respuesta final.

entrada de AVC_STREAM_REQUEST_BLOCK

SizeOfThisBlock, Version y Function
Use la macro INIT_AVCSTRM_HEADER para inicializar estos miembros. Pase AVCSTRM_CLOSE en el argumento Request de la macro.

AVCStreamContext
Especifica el contexto de flujo (identificador) de la secuencia que se va a cerrar. Si AVCSTRM_CLOSE devuelve correctamente, este valor ya no es válido.

A continuación se muestra un ejemplo de cómo especificar la secuencia que se va a cerrar:

    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 controlador de subunidad debe asignar primero un IRP y una estructura de AVC_STREAM_REQUEST_BLOCK .

A continuación, debe usar la macro INIT_AVCSTRM_HEADER para inicializar la estructura de AVC_STREAM_REQUEST_BLOCK, pasando AVCSTRM_CLOSE como argumento Request a la macro.

A continuación, el controlador de subunidad establece el miembro AVCStreamContext en la secuencia que se va a cerrar.

Para enviar esta solicitud, una subunidad envía una IRP_MJ_INTERNAL_DEVICE_CONTROL IRP con el miembro IoControlCode del IRP establecido en IOCTL_AVCSTRM_CLASS y el miembro Argument1 del IRP establecido en la estructura AVC_STREAM_REQUEST_BLOCK que describe la operación de cierre que se va a realizar.

Un controlador de subunidad puede esperar que este comando se complete sincrónicamente. El resultado devuelve inmediatamente sin operaciones pendientes en avcstrm.sys.

Se debe llamar a este código de función en IRQL = PASSIVE_LEVEL.

Comentarios

Esta función usa el miembro AVCStreamContext de la unión CommandData en la estructura AVC_STREAM_REQUEST_BLOCK, como se muestra a continuación.

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

Requisitos

Encabezados: Declarado en avcstrm.h. Incluya avcstrm.h.

Consulte también

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_FUNCTION