Compartir a través de


Cambios en el controlador de transferencia de datos de IStream

Para minimizar los cambios en los controladores que se desarrollaron antes de Windows Vista, los controladores no tienen que implementar interfaces nuevas para admitir la transferencia de datos de IStream . En su lugar, se expone una nueva interfaz a través de la interfaz IWiaMiniDrvCallBack. Los controladores pueden llamar a IWiaMiniDrvCallBack::QueryInterface para la nueva función de devolución de llamada IWiaTransfer , que les dará acceso a los flujos de datos y las notificaciones de estado. La interfaz IWiaTransfer se describe en la documentación de Microsoft Windows SDK.

El código de transferencia de datos dentro del controlador es ahora más sencillo porque todas las transferencias se controlan de la misma manera, sin lógica de rama de transferencia de archivos o memoria.

Los controladores que no admiten el modelo de transferencia de IStream normalmente realizan los pasos siguientes:

  1. Compruebe las marcas para determinar si la solicitud es para una carga o una descarga.

  2. Adquiera la interfaz IWiaMiniDrvCallBack .

  3. Recibir una secuencia de destino de la función de devolución de llamada.

  4. Realizar un bucle de transferencia de datos:

    1. Recibir datos del dispositivo.
    2. Escriba datos en la secuencia.

Sin embargo, para los controladores que implementan el nuevo modelo de transferencia de IStream , el servicio WIA no llamará a IWiaMiniDrv::d rvWriteItemProperties porque se admite la adquisición de carpetas .

En la adquisición de carpetas, una única solicitud de transferencia se encuentra en el elemento primario, pero las propiedades del elemento real se encuentran en cada uno de los elementos secundarios que se transfieren. No se llama al método IWiaMiniDrv::d rvWriteItemProperties para cada elemento secundario, por lo que este método no se puede usar para programar la configuración del dispositivo. En el caso de los controladores que admiten transferencias de datos IStream , el servicio WIA llama a IWiaMiniDrv::d rvAcquireItemData en su lugar.

Nota Este cambio solo afecta a los controladores que admiten las nuevas transferencias de datos. Los controladores heredados, que no admiten transferencias de datos IStream , no se ven afectados; El servicio WIA seguirá llamando al método IWiaMiniDrv::d rvWriteItemProperties para ellos.

En las adquisiciones de carpetas en las que el controlador realiza varias llamadas a IWiaTransferCallback::GetNextStream (que se describe en la documentación de Microsoft Windows SDK), el controlador solo puede tener una secuencia activa a la vez.

El controlador solo debe llamar a los métodos IStream::Write, IStream::Seek e IStream::SetSize de la secuencia (que se describen en la documentación de Windows SDK) durante una operación de descarga. Esta restricción facilita la escritura del filtro. El controlador no debe esperar que la secuencia de destino implemente ningún otro método.

Cuando la propiedad WIA_DPS_PAGE_SIZE se establece en WIA_PAGE_AUTO (es decir, se habilita la detección automática de tamaño de página), el controlador debe proporcionar información de dimensión precisa sobre la imagen solo después de completar la transferencia de los datos de imagen. En el caso de las transferencias basadas en secuencias, el controlador debe actualizar las dimensiones de imagen en el encabezado de imagen al final de la transferencia. Al principio de una nueva sesión, el valor de WIA_DPS_PAGE_SIZE propiedad siempre debe establecerse en un valor distinto de WIA_PAGE_AUTO.