Compartir a través de


Cambios del 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 proporcionará acceso a los flujos de datos y notificaciones de estado. La interfaz IWiaTransfer se describe en la documentación del SDK de Microsoft Windows.

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. Reciba una secuencia de destino de la función de devolución de llamada.

  4. Realice un bucle de transferencia de datos:

    1. Recibir datos del dispositivo.
    2. Escriba datos en el flujo de datos.

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

En la gestión de carpetas, una única solicitud de transferencia se encuentra en el elemento padre, pero las propiedades específicas del elemento se encuentran en cada uno de los elementos hijo 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. Para los controladores que admiten transferencias de datos IStream, el servicio WIA llama a IWiaMiniDrv::drvAcquireItemData, 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::drvWriteItemProperties 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 del SDK de Microsoft Windows), el controlador solo puede tener una secuencia activa a la vez.

El controlador debe llamar solo 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, la detección automática de tamaño de página está habilitada), el controlador debe proporcionar información de dimensión precisa sobre la imagen solo después de completar la transferencia de los datos de la imagen. Para 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.