WIA Minidriver
Les applications voient les appareils d’acquisition d’images Windows (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. Il est donc nécessaire que la vue de chaque application d’un objet IWiaItem ou IWiaItem2 soit indépendante des vues d’une autre application. Pour ce faire, vous avez deux objets d’élément différents. Le pilote crée l’arborescence d’éléments de pilote d’objets d’interface IWiaDrvItem , également appelés éléments de pilote, à l’aide des méthodes des services de pilotes WIA. Il s’agit d’objets globaux que le pilote utilise pour représenter les éléments internes de chaque pilote. Lorsqu’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 des éléments du pilote. Un nombre de références est conservé sur l’objet interface IWiaDrvItem soumis aux règles suivantes :
- Lorsqu’un pilote ajoute un objet IWiaDrvItem Interface à l’arborescence d’éléments du pilote, le nombre de références de l’objet interface IWiaDrvItem est incrémenté. Cela se produit généralement pendant IWiaMiniDrv::d rvInitializeWia ou lorsqu’une commande WIA_CMD_SYNCHRONIZE est traitée.
- Lorsqu’un pilote supprime un objet IWiaDrvItem Interface de l’arborescence des éléments du pilote, le nombre de références de l’objet interface IWiaDrvItem est décrémenté et l’objet interface IWiaDrvItem est marqué de sorte qu’il ne peut 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 peuvent toujours lire les propriétés d’un objet IWiaItem ou IWiaItem2 , même lorsque l’objet interface IWiaDrvItem correspondant a été supprimé de l’arborescence d’éléments du pilote.
- Lorsqu’un objet IWiaItem ou IWiaItem2 est créé, il est lié à un objet IWiaDrvItem Interface correspondant. Le nombre de références de l’objet interface IWiaDrvItem est incrémenté.
- Lorsqu’un objet IWiaItem ou IWiaItem2 est libéré, le lien vers son objet IWiaDrvItem Interface correspondant est rompu et le nombre de références de l’objet IWiaDrvItem Interface est décrémenté.
- Si le nombre de références d’un objet IWiaDrvItem Interface passe à zéro, l’objet Interface IWiaDrvItem est supprimé. Cela s’applique à tous les objets de l’interface IWiaDrvItem , y compris l’élément racine. Le nombre de références d’un objet interface IWiaDrvItem passe uniquement à zéro lorsqu’aucun élément d’application ne le référence et qu’il n’est plus lié à l’arborescence des éléments du pilote.
À l’aide de ce schéma de comptage 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 d’élément même après la suppression d’un élément, mais aucune opération nécessitant l’accès à l’appareil ne réussit. Étant donné que les propriétés d’é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.