Ordre d’appel pour les fonctions minidriver
Lorsqu’un minidriver est démarré, il appelle certains des points d’entrée STI plus anciens, tels que IStiUSD ::Initialize et IStiUSD ::GetStatus. Dès que la première application tente de communiquer avec l’appareil, le service WIA appelle IWiaMiniDrv ::d rvInitializeWia. C’est dans cette fonction que le minidriver doit construire l’arborescence d’éléments.
Le service WIA appelle ensuite IWiaMiniDrv ::d rvInitItemProperties pour chaque élément de l’arborescence. Le minidriver doit créer toutes les propriétés pertinentes pour l’élément. Dans certaines situations, il peut être judicieux de créer une propriété vide et de remplir ses données ultérieurement. Par exemple, pour de meilleures performances, les miniatures d’images sur les caméras doivent être lues uniquement lorsque le service WIA les demande spécifiquement, comme décrit ci-dessous.
La fonction suivante à appeler dépend de l’application et du type d’appareil. En règle générale, l’opération la plus courante d’une application consiste à transférer des données. Pour les scanneurs, l’application configure d’abord les propriétés (par exemple, le type de données et l’étendue) qui définissent l’image qu’elle souhaite obtenir à partir de l’appareil. Le service WIA appelle IWiaMiniDrv ::d rvValidateItemProperties lorsque l’application modifie des propriétés. Le minidriver doit case activée que les propriétés sont valides, en communiquant avec l’appareil, si nécessaire. Le minidriver doit généralement éviter de définir les propriétés dans cette fonction, car une autre application peut définir les propriétés sur des valeurs différentes avant le transfert de données.
Pour transférer des données, le service WIA appelle IWiaMiniDrv ::d rvLockWiaDevice, IWiaMiniDrv ::d rvWriteItemProperties, IWiaMiniDrv ::d rvAcquireItemData et IWiaMiniDrv ::d rvUnLockWiaDevice, dans cet ordre. Les appels de verrouillage et de déverrouillage de l’appareil garantissent qu’aucune autre application n’accède à l’appareil pendant le transfert. Pour les scanneurs, IWiaMiniDrv ::d rvWriteItemProperties doit envoyer des propriétés telles que la position, l’étendue et la résolution à l’appareil. Les pilotes de caméra n’ont généralement pas besoin d’envoyer de propriétés à l’appareil. IWiaMiniDrv ::d rvAcquireItemData doit récupérer les données d’image de l’appareil et les renvoyer à l’application via le service WIA, à l’aide de l’interface COM IWiaMiniDrvCallback.
Pour les caméras, si une application souhaite afficher des miniatures pour les images, le service WIA appelle IWiaMiniDrv ::d rvReadItemProperties sur chaque image. Le minidriver doit lire la miniature à ce stade et la mettre en cache dans le contexte de l’élément du pilote. Il est important de mettre en cache la miniature, car plusieurs applications peuvent demander la miniature, ce qui entraîne plusieurs appels à IWiaMiniDrv ::d rvReadItemProperties. Si le minidriver lit la miniature chaque fois qu’une application la demande, les performances en souffrent.
Une autre considération particulière pour les caméras est les propriétés d’élément racine qui affectent les paramètres de l’appareil photo (vitesse d’obturation, par exemple). Lorsque l’application modifie ces propriétés, le service WIA appelle IWiaMiniDrv ::d rvValidateItemProperties. Le minidriver peut communiquer avec l’appareil photo, si nécessaire, pour valider les paramètres de propriété. Cette fonction, toutefois, n’est pas le meilleur endroit pour modifier les paramètres de l’appareil photo, car une autre application peut également modifier les propriétés. Le minidriver doit mettre à jour tous les paramètres de l’appareil photo à partir des propriétés de l’élément racine lorsque la fonction IWiaMiniDrv ::d rvDeviceCommand est appelée pour capturer une nouvelle image.