WIA Minidriver
Las aplicaciones ven dispositivos windows Image Acquisition (WIA) como un árbol jerárquico de objetos IWiaItem o IWiaItem2 con el elemento raíz que representa el propio dispositivo. Más de una aplicación pueden usar dispositivos WIA simultáneamente. Por lo tanto, es necesario que la vista de cada aplicación de un objeto IWiaItem o IWiaItem2 sea independiente de las vistas de otra aplicación. Esto se logra teniendo dos objetos de elemento diferentes. El controlador crea el árbol de elementos de controlador de objetos IWiaDrvItem Interface , también denominados elementos de controlador, mediante los métodos de servicios de controlador WIA. Estos son objetos globales que el controlador usa para representar los elementos internos de cada controlador. Cuando una aplicación crea un objeto IWiaItem o IWiaItem2 (también denominado elemento de aplicación), este objeto está vinculado a la interfaz IWiaDrvItem correspondiente del controlador en el árbol de elementos del controlador. Se mantiene un recuento de referencias en el objeto IWiaDrvItem Interface sujeto a las reglas siguientes:
- Cuando un controlador agrega un objeto IWiaDrvItem Interface al árbol de elementos del controlador, se incrementa el recuento de referencias del objeto IWiaDrvItem Interface . Esto suele tener lugar durante IWiaMiniDrv::d rvInitializeWia o cuando se procesa un comando de WIA_CMD_SYNCHRONIZE.
- Cuando un controlador quita un objeto IWiaDrvItem Interface del árbol de elementos del controlador, el recuento de referencias del objeto IWiaDrvItem Interface se disminuye y el objeto IWiaDrvItem Interface se marca para que no pueda acceder al dispositivo de nuevo. Esto suele tener lugar cuando se desconecta un dispositivo o se elimina un elemento. Las aplicaciones todavía pueden leer propiedades de un objeto IWiaItem o IWiaItem2 incluso cuando el objeto IWiaDrvItem Interface correspondiente se ha quitado del árbol de elementos del controlador.
- Cuando se crea un objeto IWiaItem o IWiaItem2 , se vincula a un objeto IWiaDrvItem Interface correspondiente. El recuento de referencias del objeto IWiaDrvItem Interface se incrementa.
- Cuando se libera un objeto IWiaItem o IWiaItem2 , se reduce el vínculo a su objeto IWiaDrvItem Interface correspondiente y se disminuye el recuento de referencias del objeto IWiaDrvItem Interface .
- Si el recuento de referencias de un objeto IWiaDrvItem Interface va a cero, se elimina el objeto IWiaDrvItem Interface . Esto se aplica a todos los objetos IWiaDrvItem Interface , incluido el elemento raíz. El recuento de referencias de un objeto IWiaDrvItem Interface solo va a cero cuando ningún elemento de la aplicación hace referencia a él y ya no está vinculado al árbol de elementos del controlador.
Con este esquema de recuento de referencias, muchos objetos IWiaItem o IWiaItem2 pueden vincularse a una interfaz IWiaDrvItem sin interferencias. Dado que cada IWiaItem o IWiaItem2 contiene su propio almacenamiento de propiedades, una aplicación puede seguir leyendo propiedades de elemento incluso después de que se haya eliminado un elemento, pero ninguna operación que requiera acceso al dispositivo se realizará correctamente. Dado que las propiedades del elemento se almacenan en el objeto IWiaItem o IWiaItem2 , el controlador debe establecer las propiedades del objeto IWiaItem o IWiaItem2 en el dispositivo antes de una transferencia de datos.