Partager via


Transfert de données entre l’application Windows Vista et le pilote hérité

La couche de compatibilité permet à une application Windows Vista d’appeler IWiaTransfer::D ownload (décrit dans la documentation Microsoft Windows SDK) sur un pilote hérité. La couche de compatibilité doit implémenter le code de transfert de dossiers ainsi que les conversions de format. La couche de compatibilité implémente du code spécial pour les transferts du chargeur pour garantir qu’il est toujours possible de transférer plusieurs pages à partir d’un pilote hérité. Une application Windows Vista doit toujours être en mesure de demander plusieurs pages pendant une analyse à partir de l’élément du chargeur, même avec un transfert TYMED_FILE. Le diagramme suivant illustre un pilote hérité avec une application Windows Vista.

diagramme illustrant le transfert de données entre une application Windows Vista et un pilote hérité.

L’objet de rappel hérité dans le service WIA convertit les messages de transfert hérités et les données en messages de transfert Windows Vista et écrit les données dans le flux fourni.

Une application Windows Vista n’attend que TYMED_FILE et TYMED_MULTIPAGE_FILE afin que la couche de compatibilité soit chargée de s’assurer que les TYMED_CALLBACK et les TYMED_MULTIPAGE_CALLBACK ne sont pas exposés à une application Windows Vista à partir d’un pilote hérité.

Le moyen le plus simple d’implémenter cette partie de la couche de compatibilité a été de toujours appeler le pilote hérité avec TYMED_FILE et TYMED_MULTIPAGE_FILE définis. L’inconvénient de cette opération est que le pilote aurait toujours dû analyser l’image entière, avant que les données puissent être réécrites dans le flux de l’application. Par conséquent, la couche de compatibilité utilise TYMED_CALLBACK lorsqu’une application Windows Vista demande une analyse du format WiaImgFmt_BMP (propriété WIA_IPA_FORMAT définie sur WiaImgFmt_BMP). Cela permet à la couche de compatibilité d’écrire les données en arrière-bande par bande.

Toutefois, un pilote hérité ne prend pas en charge WiaImgFmt_BMP, mais WiaImgFmt_MEMORYBMP pour TYMED_CALLBACK. Par conséquent, l’objet de rappel de conversion doit créer l’en-tête de fichier BMP et réécrire cet en-tête de fichier dans l’application. Parfois, cela est facile, par exemple lorsque l’en-tête de fichier BMP peut être construit directement à partir de l’en-tête d’informations BMP. Il existe toutefois des cas où la hauteur de l’en-tête d’informations BMP est définie sur 0. Dans ce cas, la couche de compatibilité WIA doit attendre que toutes les données soient transférées avant de pouvoir écrire l’en-tête du fichier BMP et mettre à jour l’en-tête d’informations BMP.

La raison pour laquelle les transferts TYMED, autres que TYMED_CALLBACK, sont préformés à partir d’un pilote hérité est que les formats multipage ne sont généralement pris en charge que par TYMED_MULTIPAGE_FILE, et que les pilotes prennent généralement en charge plus de formats pour TYMED_FILE que pour TYMED_CALLBACK..

Pendant un TYMED_FILE transférer, la couche de compatibilité attend que le transfert soit terminé avant d’écrire les données dans le flux de l’application. Pour ce faire, mapper le fichier à la mémoire et réécrire toutes les données de la mémoire dans une seule demande d’écriture.

Lors d’un transfert de TYMED_CALLBACK, la couche de compatibilité réécrit dans le flux de l’application chaque fois qu’elle reçoit un message de transfert IT_MSG_DATA du pilote hérité.

La couche de compatibilité contient également un code spécial pour les transferts FEEDER. Ce code garantit que la couche de compatibilité peut transférer plusieurs pages à partir de l’ADF même si le TYMED n’est pas TYMED_MULTIPAGE_FILE. Pour ce faire, la couche de compatibilité est appelée plusieurs fois dans le pilote, chaque fois en demandant une seule page. Cette solution garantit que chaque pilote hérité sera en mesure de gérer les transferts de plusieurs pages à partir du chargeur lorsqu’il est appelé par une application Windows Vista.

Un pilote hérité peut envoyer des messages « hors bande » pendant les transferts (par exemple, pour la préversion). Ces messages seront ignorés, car ils ne s’intègrent pas dans le modèle de transfert basé sur le flux.

Pour plus d’informations sur les constantes TYMED, consultez Présentation de TYMED.