Partager via


Annulation des transferts de données dans Windows Vista

Important

Cet article contient des informations qui s’appliquent aux systèmes d’exploitation Windows obsolètes.

Dans Windows Vista, il existe une nouvelle interface, IWiaTransfer (qui est décrite dans la documentation du Kit de développement logiciel (SDK) Windows, que les applications utilisent pour effectuer des transferts de données basés sur des flux. Cette interface, en plus des nouvelles méthodes de transfert, contient une méthode Cancel qu’une application peut utiliser pour annuler les transferts de données, y compris les transferts multi-éléments. Avec cette méthode, vous pouvez annuler de manière asynchrone un transfert de données. Nous vous recommandons d’utiliser cette procédure pour annuler un transfert de données. Toutefois, une application Windows Vista peut également retourner S_FALSE de sa routine de rappel pour annuler un transfert.

Par conséquent, il existe deux façons pour une application WIA dans Windows Vista d’annuler un transfert :

  • Retourne S_FALSE à partir de sa routine de rappel.

  • Appelez IWiaTransfer ::Cancel.

Un pilote Windows Vista peut être averti de deux manières différentes que l’application a annulé le transfert :

  • Le pilote reçoit un appel à son IWiaMiniDrv ::d rvNotifyPnPEvent avec un événement WIA_EVENT_CANCEL_IO. Nous recommandons que toutes les opérations de lecture ou d’écriture en mode noyau utilisent les E/S CHEVAUCHÉES. Ce n’est qu’avec cette procédure que vous pouvez garantir l’annulation immédiate .

  • S_FALSE est retourné par deux fonctions de rappel : IWiaMiniDrvTransferCallback ::GetNextStream et IWiaMiniDrvTransferCallback ::SendMessage.

Lorsqu’une application appelle IWiaTransfer ::Cancel, la méthode IWiaMiniDrv ::d rvNotifyPnPEvent doit être appelée dans le pilote avec WIA_EVENT_CANCEL_IO. En outre, les fonctions de rappel IWiaMiniDrvTransferCallback ::GetNextStream et IWiaMiniDrvTransferCallback ::SendMessage doivent toujours retourner S_FALSE après l’annulation du transfert.

Si IWiaTransferCallback ::GetNextStream retourne WIA_STATUS_SKIP_ITEM lors d’un transfert de plusieurs éléments, une application ignore (autrement dit, ne transfère pas) l’élément actif. Une valeur de retour de S_FALSE signifie toujours que l’intégralité du transfert doit être annulée.

Les interfaces IWiaTransfer et IWiaTransferCallback sont décrites dans la documentation Microsoft Windows SDK.

IWiaMiniDrvTransferCallback