AVCSTRM_ABORT_STREAMING
El código de función AVCSTRM_ABORT_STREAMING cancela todas las solicitudes de datos pendientes y libera los recursos usados.
Bloque de estado de entrada/salida
Si se ejecuta correctamente, avcstrm.sys establece Irp-IoStatus.Status> en STATUS_SUCCESS.
Entre los valores devueltos de error posibles 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 el 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_ABORT_STREAMING en el argumento Request de la macro.
AVCStreamContext
Especifica el contexto de secuencia (identificador) devuelto por una llamada de AVCSTRM_OPEN anterior que es el destino de la operación de escritura de datos.
Un controlador de subbúsito primero debe asignar 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_READ como argumento Request a la macro.
A continuación, el controlador de subunit establece el miembro AVCStreamContext en el contexto de secuencia (identificador) de la secuencia para anular la transmisión.
Para enviar esta solicitud, una subunidad envía un irP de IRP_MJ_INTERNAL_DEVICE_CONTROL con el miembro IoControlCode del IRP establecido en IOCTL_AVCSTRM_CLASS y el miembro Argument1 del IRP establecido en la estructura de AVC_STREAM_REQUEST_BLOCK que describe la operación de anulación de streaming que se va a realizar.
Se debe llamar a este código de función en PASSIVE_LEVEL. Cuando se cancela un IRP de datos, se puede ejecutar en DISPATCH_LEVEL. En este caso, una subunidad debe iniciar un elemento de trabajo y llamar a esta función en su rutina de elemento de trabajo, que se ejecuta en el PASSIVE_LEVEL.
Comentarios
Tenga en cuenta que esta funcionalidad cancela todas las IRP de streaming. Para cancelar un IRP individual, use IoCancelIrp.
Una subunidad debe llamar a esto cuando se quita su dispositivo de destino o se cancela el IRP de datos original para detener la operación de secuencia.
Esta función no usa ningún miembro de la unión CommandData en la estructura AVC_STREAM_REQUEST_BLOCK.
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.