Partilhar via


Alterações do driver IStream de transferência de dados

Para minimizar as alterações aos controladores que foram desenvolvidos antes do Windows Vista, os controladores não têm de implementar quaisquer novas interfaces para suportar a transferência de dados IStream . Em vez disso, uma nova interface foi exposta através da interface IWiaMiniDrvCallBack. Os drivers podem chamar IWiaMiniDrvCallBack::QueryInterface para a nova função de retorno de chamada IWiaTransfer, proporcionando-lhes acesso aos fluxos de dados e notificações de status. A interface IWiaTransfer é descrita na documentação do SDK do Microsoft Windows.

O código de transferência de dados dentro do driver agora é mais simples porque todas as transferências são tratadas da mesma maneira, sem lógica de ramificação de transferência de arquivo ou memória.

Os drivers que não suportam o modelo de transferência IStream normalmente executam as seguintes etapas:

  1. Verifique os sinalizadores para determinar se a solicitação é para um upload ou um download.

  2. Adquira a interface IWiaMiniDrvCallBack .

  3. Receba um fluxo de destino da função de retorno de chamada.

  4. Execute um loop de transferência de dados:

    1. Receba dados do dispositivo.
    2. Grave dados no fluxo.

No entanto, para controladores que implementam o novo modelo de transferência IStream, o serviço WIA não chamará IWiaMiniDrv::drvWriteItemProperties porque a aquisição de pastas é suportada.

Na transferência de pastas, há apenas uma solicitação de transferência sobre o item pai, mas as propriedades reais do item estão em cada um dos itens filho que estão a ser transferidos. O método IWiaMiniDrv::d rvWriteItemProperties não é chamado para cada item filho, portanto, esse método não pode ser usado para programar as configurações do dispositivo. Para controladores que suportam transferências de dados IStream, o serviço WIA chama IWiaMiniDrv::drvAcquireItemData em vez disso.

Observação Essa alteração afeta apenas os drivers que suportam as novas transferências de dados. Os drivers herdados, que não suportam transferências de dados IStream, não são afetados; o serviço WIA continuará a chamar o método IWiaMiniDrv::drvWriteItemProperties para eles.

Em aquisições de pasta em que o controlador faz múltiplas chamadas para IWiaTransferCallback::GetNextStream (conforme descrito na documentação do SDK do Microsoft Windows), o controlador pode ter apenas um fluxo ativo de cada vez.

O driver deve chamar apenas os métodos IStream::Write, IStream::Seek e IStream::SetSize do fluxo (descritos na documentação do SDK do Windows) durante uma operação de download. Essa restrição facilita a escrita do filtro. O driver não deve esperar que o fluxo de destino implemente outros métodos.

Quando a propriedade WIA_DPS_PAGE_SIZE é definida como WIA_PAGE_AUTO (ou seja, a deteção automática do tamanho da página está ativada), o driver deve fornecer informações de dimensão precisas sobre a imagem somente depois de concluir a transferência dos dados da imagem. Para transferências baseadas em fluxo, o driver deve atualizar as dimensões da imagem no cabeçalho da imagem no final da transferência. No início de uma nova sessão, o valor da propriedade WIA_DPS_PAGE_SIZE deve ser sempre definido para um valor diferente de WIA_PAGE_AUTO.