IStream 数据传输驱动程序更改

为了尽量减少对 Windows Vista 之前开发的驱动程序的更改,驱动程序不必实现任何新接口来支持 IStream 数据传输。 而是通过 IWiaMiniDrvCallBack 接口公开了新接口。 驱动程序可以为新的 IWiaTransfer 回调函数调用 IWiaMiniDrvCallBack::QueryInterface,这将为他们提供对数据流和状态通知的访问权限。 Microsoft Windows SDK文档中介绍了 IWiaTransfer 接口。

驱动程序中的数据传输代码现在更简单,因为所有传输都以相同的方式处理,没有文件或内存传输分支逻辑。

不支持 IStream 传输模型的驱动程序通常执行以下步骤:

  1. 检查标志以确定请求是进行上传还是下载。

  2. 获取 IWiaMiniDrvCallBack 接口。

  3. 从回调函数接收目标流。

  4. 执行数据传输循环:

    1. 从设备接收数据。
    2. 将数据写入流。

但是,对于实现新 IStream 传输模型的驱动程序,WIA 服务不会调用 IWiaMiniDrv::d rvWriteItemProperties ,因为支持 文件夹获取

在文件夹获取中,单个传输请求位于父项上,但实际项目属性位于要传输的每个子项上。 不会为每个子项调用 IWiaMiniDrv::d rvWriteItemProperties 方法,因此此方法不能用于对设备设置进行编程。 对于支持 IStream 数据传输的驱动程序,WIA 服务改为调用 IWiaMiniDrv::d rvAcquireItemData

注意 此更改仅影响支持新数据传输的驱动程序。 不支持 IStream 数据传输的旧驱动程序不受影响;WIA 服务将继续为其调用 IWiaMiniDrv::d rvWriteItemProperties 方法。

在驱动程序对 IWiaTransferCallback::GetNextStream ((Microsoft Windows SDK文档) 中所述)进行多次调用的文件夹获取中,驱动程序一次只能有一个活动流。

驱动程序必须仅调用流的 IStream::WriteIStream::SeekIStream::SetSize 方法, (下载操作期间 Windows SDK 文档) 中所述。 通过此限制,可以更轻松地编写筛选器。 驱动程序不应期望目标流实现任何其他方法。

WIA_DPS_PAGE_SIZE 属性设置为WIA_PAGE_AUTO (即) 启用自动页面大小检测时,驱动程序应仅在完成图像数据传输后提供有关图像的准确尺寸信息。 对于基于流的传输,驱动程序应在传输结束时更新映像标头中的图像尺寸。 在新会话开始时,WIA_DPS_PAGE_SIZE 属性的值应始终设置为WIA_PAGE_AUTO以外的值。