Compartilhar via


Inicializando o minidriver WIA

A primeira etapa na implementação da interface IWiaMiniDrv é inicializar o minidriver e criar uma árvore hierárquica de itens de driver. Para fazer isso, o serviço WIA chama o método IWiaMiniDrv::d rvInitializeWia sempre que um aplicativo cliente pretende usar o dispositivo. Se dois ou mais aplicativos estiverem usando simultaneamente o dispositivo, o serviço WIA chamará esse método para cada aplicativo. Nesse método, o minidriver normalmente faz o seguinte:

  1. Inicializa parâmetros passados do serviço WIA.

  2. Salva a interface do dispositivo STI apontada por pStiDevice. Isso é feito para que os métodos IStiDevice::LockDevice e IStiDevice::UnLockDevice possam ser usados para bloquear ou desbloquear o dispositivo WIA.

  3. Caches bstrDeviceID e bstrRootFullItemName em variáveis membro para que possam ser usados por outros métodos.

  4. Abre um identificador para o dispositivo. (Esta etapa é recomendada para portas não compartilhadas, como USB, SCSI e 1394.)

  5. Cria a árvore de itens, conforme descrito em Criando a árvore de itens do driver WIA.

O método IWiaMiniDrv::d rvInitializeWia também pode ser usado para criar e inicializar matrizes e estruturas dinâmicas que o driver usa. Por exemplo, uma matriz de comandos e eventos compatíveis com o driver pode ser criada para uso posterior pelo método IWiaMiniDrv::d rvGetCapabilities .

Nota O método IWiaMiniDrv::d rvGetCapabilities pode ser chamado antes de IWiaMiniDrv::d rvInitializeWia ser chamado. Isso pode acontecer quando o serviço WIA precisa consultar informações de evento antes que um aplicativo exista para usar o dispositivo. O método IWiaMiniDrv::d rvInitializeWia é chamado somente quando um aplicativo sinaliza sua intenção de usar o dispositivo.

Mantendo o controle das conexões de aplicativo

Conforme indicado anteriormente, quando um aplicativo pretende se comunicar com um dispositivo WIA, o serviço WIA chama o método IWiaMiniDrv::d rvInitializeWia do driver apropriado. Quando o aplicativo é concluído com o dispositivo e libera todas as referências wia a ele, o serviço WIA chama o método IWiaMiniDrv::d rvUnInitializeWia do driver apropriado. Observe que o WIA dá suporte a várias conexões simultâneas de aplicativo. Isso significa que dois ou mais aplicativos podem solicitar uma interface WIA associada ao mesmo dispositivo. No entanto, isso não significa que o driver deve lidar com solicitações simultâneas; O serviço WIA garante que apenas uma solicitação seja enviada ao driver por vez. No entanto, o serviço WIA pode chamar o método IWiaMiniDrv::d rvInitializeWia várias vezes antes de chamar o método IWiaMiniDrv::d rvUnInitializeWia .

Por que essas informações são úteis? Muitas vezes, há recursos que os drivers podem precisar quando os aplicativos os estão usando, como a árvore de itens do driver WIA, bibliotecas de filtragem de imagens e outros. Como esses recursos podem ocupar uma grande quantidade de memória, é melhor descarregá-los quando eles não são necessários.

Nota Os métodos IWiaMiniDrv::d rvInitializeWia e IWiaMiniDrv::d rvUnInitializeWia são usados para informar apenas os drivers de conexões de aplicativo. O serviço WIA pode chamar outros métodos de driver sem chamar primeiro IWiaMiniDrv::d rvInitializeWia, o que significa que o serviço WIA não necessariamente chama IWiaMiniDrv::d rvUnInitializeWia quando é feito. Os métodos chamados são métodos informativos que não exigem itens WIA, como IWiaMiniDrv::d rvGetCapabilities e IWiaMiniDrv::d rvGetWiaFormatInfo.

Esta seção contém os seguintes tópicos:

Ordem de chamada para funções minidriver

Carregando e descarregando um minidriver WIA

Conectando e desconectando um aplicativo WIA

Relatando o status do minidriver WIA