初始化 WIA 微型驱动程序

实现 IWiaMiniDrv 接口 的第一步是初始化微型驱动程序并创建驱动程序项的分层树。 为此,每次客户端应用程序打算使用设备时,WIA 服务都会调用 IWiaMiniDrv::d rvInitializeWia 方法。 如果两个或更多应用程序同时使用该设备,WIA 服务会为每个应用程序调用此方法。 在此方法中,微型驱动程序通常执行以下操作:

  1. 初始化从 WIA 服务传入的参数。

  2. 保存 pStiDevice 指向的 STI 设备接口。这样做是为了使 IStiDevice::LockDeviceIStiDevice::UnLockDevice 方法可用于锁定或解锁 WIA 设备。

  3. 在成员变量中缓存 bstrDeviceIDbstrRootFullItemName ,以便其他方法可以使用它们。

  4. 打开设备的句柄。 (建议将此步骤用于非共享端口,例如 USB、SCSI 和 1394.)

  5. 生成项树,如 创建 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 rvInitializeWiaIWiaMiniDrv::d rvUnInitializeWia 方法仅用于通知驱动程序应用程序连接。 WIA 服务无需先调用 IWiaMiniDrv::d rvInitializeWia 即可调用其他驱动程序方法,这意味着 WIA 服务完成后不一定调用 IWiaMiniDrv::d rvUnInitializeWia 。 调用的方法是不需要 WIA 项的信息方法,例如 IWiaMiniDrv::d rvGetCapabilitiesIWiaMiniDrv::d rvGetWiaFormatInfo

本节包含下列主题:

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

加载和卸载 WIA 微型驱动程序

连接和断开 WIA 应用程序

报告 WIA 微型驱动程序状态