Modifications du pilote de transfert de données IStream
Pour réduire les modifications apportées aux pilotes développés avant Windows Vista, les pilotes n’ont pas besoin d’implémenter de nouvelles interfaces pour prendre en charge le transfert de données IStream . Au lieu de cela, une nouvelle interface a été exposée via l’interface IWiaMiniDrvCallBack. Les pilotes peuvent appeler IWiaMiniDrvCallBack::QueryInterface pour la nouvelle fonction de rappel IWiaTransfer, qui leur donnera accès aux flux de données et aux notifications status. L’interface IWiaTransfer est décrite dans la documentation Microsoft Windows SDK.
Le code de transfert de données à l’intérieur du pilote est désormais plus simple, car tous les transferts sont gérés de la même façon, sans logique de branche de transfert de fichier ou de mémoire.
Les pilotes qui ne prennent pas en charge le modèle de transfert IStream effectuent généralement les étapes suivantes :
Vérifiez les indicateurs pour déterminer si la demande concerne un chargement ou un téléchargement.
Acquérir l’interface IWiaMiniDrvCallBack .
Recevez un flux de destination à partir de la fonction de rappel.
Effectuez une boucle de transfert de données :
- Recevoir des données de l’appareil.
- Écrire des données dans le flux.
Toutefois, pour les pilotes qui implémentent le nouveau modèle de transfert IStream , le service WIA n’appelle pas IWiaMiniDrv::d rvWriteItemProperties, car l’acquisition de dossiers est prise en charge.
Dans l’acquisition de dossiers, une seule demande de transfert se trouve sur l’élément parent, mais les propriétés réelles de l’élément se trouvent sur chacun des éléments enfants en cours de transfert. La méthode IWiaMiniDrv::d rvWriteItemProperties n’étant pas appelée pour chaque élément enfant, cette méthode ne peut pas être utilisée pour programmer les paramètres de l’appareil. Pour les pilotes qui prennent en charge les transferts de données IStream , le service WIA appelle plutôt IWiaMiniDrv::d rvAcquireItemData .
Note Cette modification affecte uniquement les pilotes qui prennent en charge les nouveaux transferts de données. Les pilotes hérités, qui ne prennent pas en charge les transferts de données IStream , ne sont pas affectés ; le service WIA continue d’appeler la méthode IWiaMiniDrv::d rvWriteItemProperties pour eux.
Dans les acquisitions de dossiers où le pilote effectue plusieurs appels à IWiaTransferCallback::GetNextStream (décrit dans la documentation Microsoft Windows SDK), le pilote ne peut avoir qu’un seul flux actif à la fois.
Le pilote doit appeler uniquement les méthodes IStream::Write, IStream::Seek et IStream::SetSize du flux (qui sont décrites dans la documentation du SDK Windows) pendant une opération de téléchargement. Cette restriction facilite l’écriture du filtre. Le pilote ne doit pas s’attendre à ce que le flux de destination implémente d’autres méthodes.
Lorsque la propriété WIA_DPS_PAGE_SIZE est définie sur WIA_PAGE_AUTO (c’est-à-dire que la détection automatique de la taille de page est activée), le pilote doit fournir des informations de dimension précises sur l’image uniquement après avoir terminé le transfert des données de l’image. Pour les transferts basés sur des flux, le pilote doit mettre à jour les dimensions de l’image dans l’en-tête d’image à la fin du transfert. Au début d’une nouvelle session, la valeur de WIA_DPS_PAGE_SIZE propriété doit toujours être définie sur une valeur autre que WIA_PAGE_AUTO.