SRB_OPEN_STREAM

El controlador de clase envía esta solicitud para abrir una secuencia.

Valor devuelto

El minidriver debe establecer uno de los siguientes como estado en el SRB:

STATUS_SUCCESS
Indica la finalización correcta del comando.

STATUS_NOT_IMPLEMENTED
Indica que la función no es compatible con el minidriver.

STATUS_TOO_MANY_NODES
Indica que no hay suficientes recursos para abrir esta secuencia.

STATUS_IO_DEVICE_ERROR
Indica que se ha producido un error de hardware.

Comentarios

El controlador de clase proporciona un búfer de HW_STREAM_OBJECT en pSrb-StreamObject>, con pSrb-StreamObject-StreamNumber >> establecido en el número de la secuencia que se va a abrir. El puntero pSrb apunta a una estructura de HW_STREAM_REQUEST_BLOCK . StreamNumber corresponde al desplazamiento de la secuencia dentro de la estructura HW_STREAM_DESCRIPTOR que proporciona el minidriver en respuesta a una solicitud de SRB_GET_STREAM_INFO . El controlador de clase especifica el formato de datos que la secuencia abierta debe proporcionar en pSrb-CommandData-OpenFormat.>>

Cuando el minidriver recibe esta solicitud, debe determinar si se puede abrir la secuencia especificada en este momento. El minidriver también debe comprobar el formato KSDATAFORMAT pasado. Campo OpenFormat del SRB. Si se puede abrir la secuencia, el minidriver actualiza la estructura de HW_STREAM_OBJECT y devuelve STATUS_SUCCESS. Si el número máximo de instancias de flujo ya están abiertos o los recursos de hardware necesarios para abrir esta secuencia no están disponibles, el minidriver devuelve un estado de error adecuado.

Cuando el minidriver recibe el comando SRB_OPEN_STREAM, el minidriver debe:

  1. Compruebe que no se ha superado el número máximo de instancias de flujo y que el valor del índice de flujo es válido.

  2. Compruebe que el formato de datos solicitado es válido para esta secuencia.

  3. Establezca el formato de la secuencia.

  4. Mantenga una matriz de todas las estructuras de extensión de secuencia de la extensión de dispositivo para que los IRP se puedan cancelar desde cualquier secuencia.

  5. Especifique punteros, en el objeto stream, a los controladores de datos de flujo y a los controladores de control.

  6. Establezca la marca DMA en el objeto de secuencia si el dispositivo realizará DMA directamente en las direcciones del búfer de datos pasadas a las rutinas ReceiveDataPacket . Si el controlador accede a los búferes de datos pasados mediante direccionamiento lógico, establezca también la marca PIO en el objeto stream.

  7. Si la compatibilidad con el reloj está disponible en la secuencia, indique esto a través del miembro HwClockObject en el objeto stream.