Partilhar via


Ordem de chamada para funções de minidriver

Quando um minidriver é iniciado, ele chama alguns dos pontos de entrada de STI mais antigos, como IStiUSD::Initialize e IStiUSD::GetStatus. Assim que o primeiro aplicativo tenta se comunicar com o dispositivo, o serviço WIA chama IWiaMiniDrv::d rvInitializeWia. É nessa função que o minidriver deve construir a árvore de itens.

O serviço WIA chama IWiaMiniDrv::d rvInitItemProperties para cada item na árvore. O minidriver deve criar todas as propriedades relevantes para o item. Em algumas situações, pode ser sábio criar uma propriedade vazia e preencher seus dados posteriormente. Por exemplo, para melhor desempenho, as miniaturas de imagem em câmeras devem ser lidas somente quando o serviço WIA solicita especificamente por elas, conforme descrito abaixo.

A próxima função a ser chamada depende do aplicativo e do tipo de dispositivo. Normalmente, a operação mais comum de um aplicativo é transferir dados. Para scanners, o aplicativo primeiro configura as propriedades (por exemplo, tipo de dados e extensão) que definem a imagem que deseja obter do dispositivo. O serviço WIA chama IWiaMiniDrv::d rvValidateItemProperties quando o aplicativo altera todas as propriedades. O minidriver deve marcar que as propriedades são válidas, comunicando-se com o dispositivo, se necessário. O minidriver geralmente deve evitar definir as propriedades nessa função, pois outro aplicativo pode definir as propriedades como valores diferentes antes que a transferência de dados ocorra.

Para transferir dados, o serviço WIA chama IWiaMiniDrv::d rvLockWiaDevice, IWiaMiniDrv::d rvWriteItemProperties, IWiaMiniDrv::d rvAcquireItemData e IWiaMiniDrv::d rvUnLockWiaDevice, nessa ordem. As chamadas para bloquear e desbloquear o dispositivo garantem que nenhum outro aplicativo acesse o dispositivo durante a transferência. Para scanners, IWiaMiniDrv::d rvWriteItemProperties deve enviar propriedades como posição, extensão e resolução para o dispositivo. Normalmente, os drivers de câmera não precisam enviar nenhuma propriedade para o dispositivo. IWiaMiniDrv::d rvAcquireItemData deve recuperar os dados da imagem do dispositivo e enviá-los de volta para o aplicativo por meio do serviço WIA, usando a interface COM IWiaMiniDrvCallback.

Para câmeras, se um aplicativo quiser exibir miniaturas para as imagens, o serviço WIA chamará IWiaMiniDrv::d rvReadItemProperties em cada imagem. O minidriver deve ler a miniatura nesse ponto e armazená-la em cache no contexto do item de driver. É importante armazenar em cache a miniatura, pois vários aplicativos podem solicitar a miniatura, resultando em várias chamadas para IWiaMiniDrv::d rvReadItemProperties. Se o minidriver ler a miniatura sempre que um aplicativo solicitar, o desempenho sofrerá.

Outra consideração especial para câmeras são as propriedades do item raiz que afetam as configurações na câmera (velocidade do obturador, por exemplo). Quando o aplicativo altera essas propriedades, o serviço WIA chama IWiaMiniDrv::d rvValidateItemProperties. O minidriver pode se comunicar com a câmera, se necessário, para validar as configurações da propriedade. Essa função, no entanto, não é o melhor lugar para alterar as configurações na câmera, pois outro aplicativo também pode alterar as propriedades. O minidriver deve atualizar todas as configurações da câmera das propriedades do item raiz quando a função IWiaMiniDrv::d rvDeviceCommand for chamada para capturar uma nova imagem.