SRB_OPEN_STREAM

类驱动程序发送此请求以打开流。

返回值

微型驱动程序应将以下其中一项设置为 SRB 中的状态:

STATUS_SUCCESS
指示命令成功完成。

STATUS_NOT_IMPLEMENTED
指示微型驱动程序不支持函数。

STATUS_TOO_MANY_NODES
指示没有足够的资源来打开此流。

STATUS_IO_DEVICE_ERROR
指示发生了硬件故障。

注释

类驱动程序在 pSrb-StreamObject> 中提供HW_STREAM_OBJECT缓冲区,pSrb-StreamObject-StreamNumber>> 设置为要打开的流数。 pSrb 指针指向HW_STREAM_REQUEST_BLOCK结构。 StreamNumber 对应于微型驱动程序为响应SRB_GET_STREAM_INFO请求而提供的 HW_STREAM_DESCRIPTOR 结构 中的流 偏移量。 类驱动程序指定打开的流应在 pSrb-CommandData-OpenFormat >> 中提供的数据格式。

当微型驱动程序收到此请求时,它应确定此时是否可以打开指定的流。 微型驱动程序还应验证传入的 KSDATAFORMAT 格式。SRB 的 OpenFormat 字段。 如果可以打开流,微型驱动程序会更新HW_STREAM_OBJECT结构,并返回STATUS_SUCCESS。 如果已打开的最大流实例数,或者打开此流所需的硬件资源不可用,微型驱动程序将返回适当的错误状态。

微型驱动程序收到 SRB_OPEN_STREAM 命令时,微型驱动程序应:

  1. 检查是否未超过流实例的最大数目,以及流索引值是否有效。

  2. 检查请求的数据格式是否对此流有效。

  3. 设置流的格式。

  4. 维护设备扩展中所有流扩展结构的数组,以便可以从任何流中取消 IRP。

  5. 在流对象中指定指向流数据处理程序和控制处理程序的指针。

  6. 如果设备将直接对传递到 ReceiveDataPacket 例程中的数据缓冲区地址执行 DMA,请在流对象中设置 DMA 标志。 如果驱动程序访问使用逻辑寻址传入的数据缓冲区,则还要在流对象中设置 PIO 标志。

  7. 如果时钟支持在流上可用,请通过流对象中的 HwClockObject 成员来指示这一点。