Compartir a través de


Orden de llamadas para las funciones de minidriver

Cuando se inicia un minidriver, llama a algunos de los puntos de entrada de STI más antiguos, como IStiUSD::Initialize e IStiUSD::GetStatus. En cuanto la primera aplicación intenta comunicarse con el dispositivo, el servicio WIA llama a IWiaMiniDrv::d rvInitializeWia. En esta función, el minidriver debe construir el árbol de elementos.

El servicio WIA llama a IWiaMiniDrv::d rvInitItemProperties para cada elemento del árbol. El minidriver debe crear todas las propiedades pertinentes para el elemento. En algunas situaciones, puede ser aconsejable crear una propiedad vacía y rellenar sus datos más adelante. Por ejemplo, para mejorar el rendimiento, las miniaturas de imagen en las cámaras deben leerse solo cuando el servicio WIA los solicita específicamente, como se describe a continuación.

La siguiente función a la que se va a llamar depende del tipo de dispositivo y la aplicación. Normalmente, la operación más común de una aplicación es transferir datos. En el caso de los escáneres, la aplicación configura primero las propiedades (por ejemplo, el tipo de datos y la extensión) que definen la imagen que desea obtener del dispositivo. El servicio WIA llama a IWiaMiniDrv::d rvValidateItemProperties cuando la aplicación cambia las propiedades. El minidriver debe comprobar que las propiedades son válidas, comunicándose con el dispositivo, si es necesario. Por lo general, el minidriver debe evitar establecer las propiedades de esa función, ya que otra aplicación podría establecer las propiedades en valores diferentes antes de que se produzca la transferencia de datos.

Para transferir datos, el servicio WIA llama a IWiaMiniDrv::d rvLockWiaDevice, IWiaMiniDrv::d rvWriteItemProperties, IWiaMiniDrv::d rvAcquireItemData e IWiaMiniDrv::d rvUnLockWiaDevice, en ese orden. Las llamadas para bloquear y desbloquear el dispositivo garantizan que ninguna otra aplicación acceda al dispositivo durante la transferencia. En el caso de los escáneres, IWiaMiniDrv::d rvWriteItemProperties debe enviar propiedades como la posición, la extensión y la resolución al dispositivo. Normalmente, los controladores de cámara no necesitan enviar propiedades al dispositivo. IWiaMiniDrv::d rvAcquireItemData debe recuperar los datos de imagen del dispositivo y enviarlos de nuevo a la aplicación a través del servicio WIA, mediante la interfaz COM IWiaMiniDrvCallback.

En el caso de las cámaras, si una aplicación quiere mostrar miniaturas para las imágenes, el servicio WIA llama a IWiaMiniDrv::d rvReadItemProperties en cada imagen. El minidriver debe leer la miniatura en ese momento y almacenarla en caché en el contexto del elemento de controlador. Es importante almacenar en caché la miniatura, ya que varias aplicaciones pueden solicitar la miniatura, lo que da lugar a varias llamadas a IWiaMiniDrv::d rvReadItemProperties. Si el minidriver lee la miniatura cada vez que una aplicación lo solicita, el rendimiento se ve afectado.

Otra consideración especial para las cámaras es las propiedades del elemento raíz que afectan a la configuración de la cámara (velocidad de obturación, por ejemplo). Cuando la aplicación cambia estas propiedades, el servicio WIA llama a IWiaMiniDrv::d rvValidateItemProperties. El minidriver puede comunicarse con la cámara, si es necesario, para validar la configuración de la propiedad. Sin embargo, esta función no es el mejor lugar para cambiar la configuración de la cámara, ya que otra aplicación también puede cambiar las propiedades. El minidriver debe actualizar toda la configuración de la cámara desde las propiedades del elemento raíz cuando se llama a la función IWiaMiniDrv::d rvDeviceCommand para capturar una nueva imagen.