Minipilote WIA
les Applications voient Windows les appareils d’Acquisition d’images (WIA) comme une arborescence hiérarchique d’objets IWiaItem ou IWiaItem2 avec l’élément racine représentant l’appareil lui-même. Les appareils WIA peuvent être utilisés simultanément par plusieurs applications. C’est pourquoi il est nécessaire que l’affichage de chaque application d’un objet IWiaItem ou IWiaItem2 soit indépendant des vues d’une autre application. Pour ce faire, vous devez disposer de deux objets Item différents. Le pilote crée l’arborescence d’éléments de pilote des objets d' interface IWiaDrvItem , également appelés éléments de pilote, à l’aide des méthodes de services de pilote WIA. Il s’agit d’objets globaux que le pilote utilise pour représenter les éléments internes de chaque pilote. Quand une application crée un objet IWiaItem ou IWiaItem2 (également appelé élément d’application), cet objet est lié à l' interface IWiaDrvItem correspondante du pilote dans l’arborescence d’éléments du pilote. Un décompte de références est conservé sur l’objet d' interface IWiaDrvItem en fonction des règles suivantes :
- Lorsqu’un pilote ajoute un objet d' interface IWiaDrvItem à l’arborescence des éléments du pilote, le nombre de références de l’objet d' interface IWiaDrvItem est incrémenté. Cela se produit généralement lors du traitement de IWiaMiniDrv ::D rvinitializewia ou lorsqu’une _ commande WIA cmd _ Synchronize est traitée.
- Lorsqu’un pilote supprime un objet d' interface IWiaDrvItem de l’arborescence d’éléments de pilote, le décompte de références de l’objet d' interface IWiaDrvItem est décrémenté et l’objet d' interface IWiaDrvItem est marqué afin qu’il ne puisse plus accéder à l’appareil. Cela se produit généralement lorsqu’un appareil est déconnecté ou qu’un élément est supprimé. Les applications sont toujours en mesure de lire des propriétés à partir d’un objet IWiaItem ou IWiaItem2 , même lorsque l’objet interface IWiaDrvItem correspondant a été supprimé de l’arborescence des éléments du pilote.
- Lorsqu’un objet IWiaItem ou IWiaItem2 est créé, il est lié à un objet d' interface IWiaDrvItem correspondant. Le décompte de références de l’objet d' interface IWiaDrvItem est incrémenté.
- Lorsqu’un objet IWiaItem ou IWiaItem2 est libéré, le lien vers l’objet d' interface IWiaDrvItem correspondant est interrompu et le décompte de références de l’objet d' interface IWiaDrvItem est décrémenté.
- Si le décompte de références d’un objet d' interface IWiaDrvItem atteint zéro, l’objet d' interface IWiaDrvItem est supprimé. Cela s’applique à tous les objets d' interface IWiaDrvItem , y compris l’élément racine. Le décompte de références d’un objet d' interface IWiaDrvItem passe à zéro uniquement lorsqu’aucun élément d’application ne le référence et qu’il n’est plus lié à l’arborescence d’éléments du pilote.
À l’aide de ce schéma de décompte de références, de nombreux objets IWiaItem ou IWiaItem2 peuvent être liés à une interface IWiaDrvItem sans interférence. Étant donné que chaque IWiaItem ou IWiaItem2 contient son propre stockage de propriétés, une application peut continuer à lire les propriétés de l’élément, même après la suppression d’un élément, mais aucune opération nécessitant l’accès à l’appareil ne sera effectuée. Étant donné que les propriétés de l’élément sont stockées dans l’objet IWiaItem ou IWiaItem2 , le pilote doit définir les propriétés de l’objet IWiaItem ou IWiaItem2 sur l’appareil avant un transfert de données.