初始化 WIA 微型驱动程序
实现 IWiaMiniDrv 接口 的第一步是初始化微型驱动程序并创建驱动程序项的分层树。 为此,每次客户端应用程序打算使用设备时,WIA 服务都会调用 IWiaMiniDrv::d rvInitializeWia 方法。 如果两个或更多应用程序同时使用该设备,WIA 服务会为每个应用程序调用此方法。 在此方法中,微型驱动程序通常执行以下操作:
初始化从 WIA 服务传入的参数。
保存 pStiDevice 指向的 STI 设备接口。这样做是为了使 IStiDevice::LockDevice 和 IStiDevice::UnLockDevice 方法可用于锁定或解锁 WIA 设备。
在成员变量中缓存 bstrDeviceID 和 bstrRootFullItemName ,以便其他方法可以使用它们。
打开设备的句柄。 (建议将此步骤用于非共享端口,例如 USB、SCSI 和 1394.)
生成项树,如 创建 WIA 驱动程序项树中所述。
IWiaMiniDrv::d rvInitializeWia 方法还可用于创建和初始化驱动程序使用的动态数组和结构。 例如,可以创建驱动程序支持的命令和事件的数组,供 IWiaMiniDrv::d rvGetCapabilities 方法稍后使用。
注意 在调用 IWiaMiniDrv::drvInitializeWia 之前,可能会调用 IWiaMiniDrv::d rvGetCapabilities 方法。 当 WIA 服务需要在应用程序存在之前查询事件信息以使用设备时,可能会发生这种情况。 仅当应用程序发出使用设备的意向信号时,才会调用 IWiaMiniDrv::d rvInitializeWia 方法。
跟踪应用程序连接
如前所述,当应用程序打算与 WIA 设备通信时,WIA 服务会调用相应驱动程序的 IWiaMiniDrv::d rvInitializeWia 方法。 当应用程序完成设备并释放对其的所有 WIA 引用时,WIA 服务将调用相应驱动程序的 IWiaMiniDrv::d rvUnInitializeWia 方法。 请注意,WIA 支持多个同时进行的应用程序连接。 这意味着两个或多个应用程序可以请求与同一设备关联的 WIA 接口。 不过,这并不意味着驱动程序必须处理同时请求;WIA 服务确保一次只向驱动程序发送一个请求。 但是,WIA 服务可以在调用 IWiaMiniDrv::drvUnInitializeWia 方法之前多次调用 IWiaMiniDrv::d rvInitializeWia 方法。
为什么此信息有用? 应用程序使用它们时,驱动程序通常需要一些资源,例如 WIA 驱动程序项树、图像筛选库等。 由于这些资源可能会占用大量内存,因此最好在不需要时将其卸载。
注意IWiaMiniDrv::d rvInitializeWia 和 IWiaMiniDrv::d rvUnInitializeWia 方法仅用于通知驱动程序应用程序连接。 WIA 服务无需先调用 IWiaMiniDrv::d rvInitializeWia 即可调用其他驱动程序方法,这意味着 WIA 服务完成后不一定调用 IWiaMiniDrv::d rvUnInitializeWia 。 调用的方法是不需要 WIA 项的信息方法,例如 IWiaMiniDrv::d rvGetCapabilities 和 IWiaMiniDrv::d rvGetWiaFormatInfo。
本节包含下列主题: