Cancelación de transferencias de datos en Windows Vista
Importante
Este artículo contiene información que se aplica a los sistemas operativos Windows obsoletos.
En Windows Vista, hay una nueva interfaz, IWiaTransfer (que se describe en la documentación de Windows SDK) que las aplicaciones usan para realizar transferencias de datos basadas en flujos. Esta interfaz, además de los nuevos métodos de transferencia, contiene un método Cancel que una aplicación puede usar para cancelar las transferencias de datos, incluidas las transferencias de varios elementos. Con este método, puede cancelar de forma asincrónica una transferencia de datos. Se recomienda usar este procedimiento para cancelar una transferencia de datos. Sin embargo, una aplicación de Windows Vista también puede devolver S_FALSE de su rutina de devolución de llamada para cancelar una transferencia.
Por lo tanto, hay dos maneras de que una aplicación WIA en Windows Vista cancele una transferencia:
Devuelve S_FALSE de su rutina de devolución de llamada.
Llame a IWiaTransfer::Cancel.
Se puede notificar a un controlador de Windows Vista de dos maneras diferentes que la aplicación ha cancelado la transferencia:
El controlador recibe una llamada a su IWiaMiniDrv::d rvNotifyPnPEvent con un evento de WIA_EVENT_CANCEL_IO. Se recomienda que todas las operaciones de lectura o escritura en modo kernel usen E/S SUPERPUESTA. Solo con este procedimiento puede garantizar la cancelación inmediata .
S_FALSE se devuelve de dos funciones de devolución de llamada: IWiaMiniDrvTransferCallback::GetNextStream e IWiaMiniDrvTransferCallback::SendMessage.
Cuando una aplicación llama a IWiaTransfer::Cancel, se debe llamar al método IWiaMiniDrv::d rvNotifyPnPEvent en el controlador con WIA_EVENT_CANCEL_IO. Además, las funciones de devolución de llamada IWiaMiniDrvTransferCallback::GetNextStream e IWiaMiniDrvTransferCallback::SendMessage siempre deben devolver S_FALSE una vez cancelada la transferencia.
Si IWiaTransferCallback::GetNextStream devuelve WIA_STATUS_SKIP_ITEM durante una transferencia de varios elementos, una aplicación omite (es decir, no transfiere) el elemento actual. Un valor devuelto de S_FALSE sigue significando que se debe cancelar toda la transferencia.
Las interfaces IWiaTransfer e IWiaTransferCallback se describen en la documentación de Microsoft Windows SDK.