Compartilhar via


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

Para minimizar as alterações nos drivers que foram desenvolvidas antes do Windows Vista, os drivers não precisam implementar nenhuma nova interface para dar suporte à transferência de dados IStream . Em vez disso, uma nova interface foi exposta por meio da interface IWiaMiniDrvCallBack. Os drivers podem chamar IWiaMiniDrvCallBack::QueryInterface para a nova função de retorno de chamada IWiaTransfer, que lhes dará acesso aos fluxos de dados e status notificações. 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 branch de transferência de memória ou arquivo.

Os drivers que não dão suporte ao 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. Receber um fluxo de destino da função de retorno de chamada.

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

    1. Receber dados do dispositivo.
    2. Gravar dados no fluxo.

No entanto, para drivers que implementam o novo modelo de transferência IStream , o serviço WIA não chamará IWiaMiniDrv::d rvWriteItemProperties porque há suporte para aquisição de pastas .

Na aquisição de pastas, uma única solicitação de transferência está no item pai, mas as propriedades reais do item estão em cada um dos itens filho que estão sendo 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 drivers que dão suporte a transferências de dados IStream , o serviço WIA chama IWiaMiniDrv::d rvAcquireItemData .

Nota Essa alteração afeta apenas os drivers que dão suporte às novas transferências de dados. Os drivers herdados, que não dão suporte a transferências de dados IStream , não são afetados; O serviço WIA continuará a chamar o método IWiaMiniDrv::d rvWriteItemProperties para eles.

Em aquisições de pastas em que o driver faz várias chamadas para IWiaTransferCallback::GetNextStream (que é descrito na documentação do SDK do Microsoft Windows), o driver pode ter apenas um fluxo ativo por vez.

O driver deve chamar apenas os métodos IStream::Write, IStream::Seek e IStream::SetSize do fluxo (que são descritos na documentação do SDK do Windows) durante uma operação de download. Essa restrição facilita a gravação 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 detecção automática de tamanho de página está habilitada), 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 de 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 sempre deve ser definido como um valor diferente de WIA_PAGE_AUTO.