Partager via


Utilisation de la méthode d’échappement IStiUSD

La méthode IStiUSD::Escape est appelée pour transmettre des informations directement au matériel. Cette méthode est prise en charge uniquement sur Windows XP et les systèmes d’exploitation ultérieurs.

Toutes les communications entre une application compatible TWAIN et le pilote WIA sont d’abord envoyées au gestionnaire de source de données (twain_32.dll), qui à son tour appelle la couche de compatibilité TWAIN (wiadss.dll). La couche de compatibilité TWAIN appelle ensuite la méthode IStiUSD::Escape du pilote WIA et transmet l’un des deux codes d’échappement suivants à la méthode :

code d’échappement ESC_TWAIN_CAPABILITY

code d’échappement ESC_TWAIN_PRIVATE_SUPPORTED_CAPS

Lorsque l’application TWAIN demande la liste des capacités privées du pilote WIA, la couche de compatibilité TWAIN appelle la méthode IStiUSD::Escape du pilote, en passant ESC_TWAIN_PRIVATE_SUPPORTED_CAPS dans l’appel. Si le pilote ne prend pas en charge la fonctionnalité directe, il retourne la liste des fonctionnalités statiques (par défaut) de la couche de compatibilité TWAIN. Sinon, le pilote retourne une liste des fonctionnalités privées prises en charge à la couche de compatibilité TWAIN.

Lorsque l’application TWAIN envoie une opération de fonctionnalité qui ne figure pas déjà dans la liste par défaut de la couche de compatibilité TWAIN, la couche de compatibilité TWAIN appelle la méthode IStiUSD::Escape du pilote, en passant cette fois ESC_TWAIN_CAPABILITY dans l’appel.

Toutefois, l’explication ci-dessus est un peu trop simple. Lorsque l’application TWAIN demande la liste des fonctionnalités privées du pilote, la couche de compatibilité TWAIN effectue en fait deux appels à la méthode IStiUSD::Escape du pilote. Dans le premier appel, la couche de compatibilité TWAIN demande au pilote WIA la quantité de mémoire nécessaire pour stocker la liste des capacités. La couche de compatibilité TWAIN alloue ensuite cette quantité de mémoire pour que le pilote WIA utilise. Dans le deuxième appel, la couche de compatibilité TWAIN demande au pilote WIA la liste des fonctionnalités, que le pilote WIA copie dans la mémoire mentionnée précédemment. La couche de compatibilité TWAIN est chargée d’allouer et de libérer toute la mémoire utilisée dans les transactions TWAIN-WIA. Cette disposition empêche le pilote WIA de libérer de la mémoire que la couche de compatibilité TWAIN utilise.

La couche de compatibilité TWAIN appelle également la méthode IStiUSD::Escape du pilote deux fois lorsque ESC_TWAIN_CAPABILITY est passé et pour laquelle l’intention est d’obtenir une fonctionnalité. Le premier appel demande au pilote WIA la quantité de mémoire dont il a besoin pour stocker la fonctionnalité, et le deuxième appel retourne la fonctionnalité. Notez que les opérations de fonctionnalité SET ne nécessitent qu’un seul appel à IStiUSD::Escape, car aucune mémoire n’a besoin d’être allouée.

Tous les appels à la méthode IStiUSD::Escape doivent être validés dans cet ordre :

  1. Validez le code de la fonction EscapeFunction . S’il n’est pas valide, échouez immédiatement. Cela empêche le traitement de codes incorrects dans le pilote.

  2. Validez la mémoire tampon entrante , lpInData. S’il n’est pas valide, échouez immédiatement. Les mémoires tampons entrantes non valides peuvent provoquer le blocage du pilote WIA.

  3. Validez la mémoire tampon sortante, pOutData. S’il n’est pas valide, échouez immédiatement. Si le pilote ne peut pas terminer la demande en écrivant les données nécessaires, il n’a pas besoin de traiter ces données.

  4. Validez la taille de la mémoire tampon sortante. Si le pilote ne peut pas écrire la quantité correcte de données dans la mémoire tampon sortante, l’appelant ne peut pas traiter correctement ces données.

Les exemples de code des sections suivantes illustrent l’utilisation de la fonctionnalité pass-though, qui prend en charge les applications TWAIN avec des fonctionnalités privées. Les exemples de code utilisent deux codes d’échappement définis dans le fichier d’en-tête wiatwcmp.h, ESC_TWAIN_PRIVATE_SUPPORTED_CAPS et ESC_TWAIN_CAPABILITY.

code d’échappement ESC_TWAIN_PRIVATE_SUPPORTED_CAPS

code d’échappement ESC_TWAIN_CAPABILITY