Condividi tramite


Annullamento dei trasferimenti di dati in Windows Vista

Importante

Questo articolo contiene informazioni applicabili ai sistemi operativi Windows obsoleti.

In Windows Vista è disponibile una nuova interfaccia, IWiaTransfer (descritta nella documentazione di Windows SDK) usata dalle applicazioni per eseguire trasferimenti di dati basati su flusso. Questa interfaccia, oltre ai nuovi metodi di trasferimento, contiene un metodo Cancel che un'applicazione può usare per annullare i trasferimenti di dati, inclusi i trasferimenti a più elementi. Con questo metodo è possibile annullare in modo asincrono un trasferimento dati. È consigliabile usare questa procedura per annullare un trasferimento dati. Tuttavia, un'applicazione Windows Vista può anche restituire S_FALSE dalla routine di callback per annullare un trasferimento.

Esistono quindi due modi per un'applicazione WIA in Windows Vista per annullare un trasferimento:

  • Restituire S_FALSE dalla routine di callback.

  • Chiamare IWiaTransfer::Cancel.

Un driver Di Windows Vista può ricevere una notifica in due modi diversi in cui l'applicazione ha annullato il trasferimento:

  • Il driver riceve una chiamata al relativo IWiaMiniDrv::d rvNotifyPnPEvent con un evento WIA_EVENT_CANCEL_IO. È consigliabile che tutte le operazioni di lettura o scrittura in modalità kernel usino L/O OVERLAPPED. Solo con questa procedura è possibile garantire l'annullamento immediato .

  • S_FALSE viene restituito da due funzioni di callback: IWiaMiniDrvTransferCallback::GetNextStream e IWiaMiniDrvTransferCallback::SendMessage.

Quando un'applicazione chiama IWiaTransfer::Cancel, il metodo IWiaMiniDrv::d rvNotifyPnPEvent deve essere chiamato nel driver con WIA_EVENT_CANCEL_IO. Inoltre, le funzioni di callback IWiaMiniDrvTransferCallback::GetNextStream e IWiaMiniDrvTransferCallback::SendMessage devono sempre restituire S_FALSE dopo l'annullamento del trasferimento.

Se IWiaTransferCallback::GetNextStream restituisce WIA_STATUS_SKIP_ITEM durante un trasferimento a più elementi, un'applicazione viene ignorata ,ovvero non trasferisce) l'elemento corrente. Un valore restituito di S_FALSE significa comunque che l'intero trasferimento deve essere annullato.

Le interfacce IWiaTransfer e IWiaTransferCallback sono descritte nella documentazione di Microsoft Windows SDK.

IWiaMiniDrvTransferCallback