Cancelamento de transferências de dados no Windows Vista
Importante
Este artigo contém informações que se aplicam a sistemas operacionais Windows obsoletos.
No Windows Vista, há uma nova interface, IWiaTransfer (que é descrita na documentação do SDK do Windows) que os aplicativos usam para executar transferências de dados baseadas em fluxo. Essa interface, além dos novos métodos de transferência, contém um método Cancel que um aplicativo pode usar para cancelar transferências de dados, incluindo transferências de vários itens. Com esse método, você pode cancelar de forma assíncrona uma transferência de dados. Recomendamos que você use este procedimento para cancelar uma transferência de dados. No entanto, um aplicativo do Windows Vista também pode retornar S_FALSE de sua rotina de retorno de chamada para cancelar uma transferência.
Portanto, há duas maneiras de um aplicativo WIA no Windows Vista cancelar uma transferência:
Retorne S_FALSE de sua rotina de retorno de chamada.
Chame IWiaTransfer::Cancel.
Um driver do Windows Vista pode ser notificado de duas maneiras diferentes de que o aplicativo cancelou a transferência:
O driver recebe uma chamada para seu IWiaMiniDrv::d rvNotifyPnPEvent com um evento WIA_EVENT_CANCEL_IO. Recomendamos que todas as operações de leitura ou gravação no modo kernel usem E/S OVERLAPPED. Somente com este procedimento você pode garantir o cancelamento imediato .
S_FALSE é retornado de duas funções de retorno de chamada: IWiaMiniDrvTransferCallback::GetNextStream e IWiaMiniDrvTransferCallback::SendMessage.
Quando um aplicativo chama IWiaTransfer::Cancel, o método IWiaMiniDrv::d rvNotifyPnPEvent deve ser chamado para o driver com WIA_EVENT_CANCEL_IO. Além disso, as funções de retorno de chamada IWiaMiniDrvTransferCallback::GetNextStream e IWiaMiniDrvTransferCallback::SendMessage sempre devem retornar S_FALSE após o cancelamento da transferência.
Se IWiaTransferCallback::GetNextStream retornar WIA_STATUS_SKIP_ITEM durante uma transferência de vários itens, um aplicativo ignorará (ou seja, não transferirá) o item atual. Um valor retornado de S_FALSE ainda significa que toda a transferência deve ser cancelada.
As interfaces IWiaTransfer e IWiaTransferCallback são descritas na documentação do SDK do Microsoft Windows.