微型驱动程序函数的调用顺序

启动微型驱动程序时,它会调用一些较旧的 STI 入口点,例如 IStiUSD::InitializeIStiUSD::GetStatus。 只要第一个应用程序尝试与设备通信,WIA 服务就会调用 IWiaMiniDrv::d rvInitializeWia。 微型驱动程序应在此函数中构造项树。

WIA 服务接下来为树中的每个项调用 IWiaMiniDrv::d rvInitItemProperties 。 微型驱动程序应创建与项相关的所有属性。 在某些情况下,最好稍后创建一个空属性并填充其数据。 例如,为了获得更好的性能,仅当 WIA 服务专门要求它们时,才应读取相机上的图像缩略图,如下所述。

要调用的下一个函数取决于应用程序和设备类型。 通常,应用程序最常见的操作是传输数据。 对于扫描程序,应用程序首先设置属性 (例如数据类型和范围) ,用于定义它想要从设备获取的图像。 当应用程序更改任何属性时,WIA 服务调用 IWiaMiniDrv::d rvValidateItemProperties 。 微型驱动程序应检查属性有效,并在必要时与设备通信。 微型驱动程序通常应避免在该函数中设置属性,因为另一个应用程序可以在数据传输之前将属性设置为不同的值。

为了传输数据,WIA 服务按该顺序调用 IWiaMiniDrv::d rvLockWiaDeviceIWiaMiniDrv::d rvWriteItemPropertiesIWiaMiniDrv::d rvAcquireItemDataIWiaMiniDrv::d rvUnLockWiaDevice。 锁定和解锁设备的调用保证在传输过程中没有其他应用程序访问该设备。 对于扫描程序, IWiaMiniDrv::d rvWriteItemProperties 应向设备发送位置、范围和分辨率等属性。 相机驱动程序通常不需要将任何属性发送到设备。 IWiaMiniDrv::d rvAcquireItemData 应使用 IWiaMiniDrvCallback COM 接口从设备检索图像数据,并通过 WIA 服务将其发送回应用程序。

对于相机,如果应用程序想要显示图像的缩略图,WIA 服务会在每个图像上调用 IWiaMiniDrv::d rvReadItemProperties 。 微型驱动程序应读取此时的缩略图,并将其缓存在驱动程序项上下文中。 缓存缩略图非常重要,因为多个应用程序可能会请求缩略图,从而导致多次调用 IWiaMiniDrv::d rvReadItemProperties。 如果微型驱动程序在应用程序每次请求缩略图时读取缩略图,则性能会受到影响。

相机的另一个特殊注意事项是影响相机设置 (快门速度的根项属性,例如) 。 当应用程序更改这些属性时,WIA 服务将调用 IWiaMiniDrv::d rvValidateItemProperties。 如有必要,微型驱动程序可以与相机通信,以验证属性设置。 但是,此函数并不是更改相机设置的最佳位置,因为另一个应用程序也可以更改属性。 调用 IWiaMiniDrv::d rvDeviceCommand 函数来捕获新图像时,微型驱动程序应从根项属性更新所有相机设置。