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.