WIA Minidriver
Os aplicativos veem dispositivos WIA (Aquisição de Imagens do Windows) como uma árvore hierárquica de objetos IWiaItem ou IWiaItem2 com o item raiz que representa o próprio dispositivo. Os dispositivos WIA podem ser usados simultaneamente por mais de um aplicativo. Portanto, é necessário que a exibição de cada aplicativo de um objeto IWiaItem ou IWiaItem2 seja independente das exibições de outro aplicativo. Isso é feito com dois objetos de item diferentes. O driver cria a árvore de itens de driver de objetos IWiaDrvItem Interface , também chamados de itens de driver, usando os métodos de serviços de driver WIA. Esses são objetos globais que o driver usa para representar os itens internos de cada driver. Quando um aplicativo cria um objeto IWiaItem ou IWiaItem2 (também chamado de item de aplicativo), esse objeto é vinculado à interface IWiaDrvItem correspondente do driver na árvore de itens do driver. Uma contagem de referência é mantida no objeto IWiaDrvItem Interface sujeito às seguintes regras:
- Quando um driver adiciona um objeto IWiaDrvItem Interface à árvore de itens do driver, a contagem de referência do objeto interface IWiaDrvItem é incrementada. Normalmente, isso ocorre durante IWiaMiniDrv::d rvInitializeWia ou quando um comando WIA_CMD_SYNCHRONIZE é processado.
- Quando um driver remove um objeto IWiaDrvItem Interface da árvore de itens do driver, a contagem de referência do objeto interface IWiaDrvItem é decrementada e o objeto interface IWiaDrvItem é marcado para que ele não possa acessar o dispositivo novamente. Normalmente, isso ocorre quando um dispositivo é desconectado ou um item é excluído. Os aplicativos ainda podem ler propriedades de um objeto IWiaItem ou IWiaItem2 mesmo quando o objeto IWiaDrvItem Interface correspondente foi removido da árvore de itens do driver.
- Quando um objeto IWiaItem ou IWiaItem2 é criado, ele é vinculado a um objeto IWiaDrvItem Interface correspondente. A contagem de referência do objeto interface IWiaDrvItem é incrementada.
- Quando um objeto IWiaItem ou IWiaItem2 é liberado, o link para seu objeto IWiaDrvItem Interface correspondente é cortado e a contagem de referência do objeto interface IWiaDrvItem é decrementada.
- Se a contagem de referência de um objeto IWiaDrvItem Interface for para zero, o objeto IWiaDrvItem Interface será excluído. Isso se aplica a todos os objetos IWiaDrvItem Interface , incluindo o item raiz. A contagem de referência de um objeto IWiaDrvItem Interface só vai para zero quando nenhum item de aplicativo faz referência a ele e não está mais vinculado à árvore de itens do driver.
Usando esse esquema de contagem de referência, muitos objetos IWiaItem ou IWiaItem2 podem ser vinculados a uma Interface IWiaDrvItem sem interferência. Como cada IWiaItem ou IWiaItem2 contém seu próprio armazenamento de propriedades, um aplicativo pode continuar a ler as propriedades do item mesmo depois que um item tiver sido excluído, mas nenhuma operação que exija acesso ao dispositivo terá êxito. Como as propriedades do item são armazenadas no objeto IWiaItem ou IWiaItem2 , o driver deve definir as propriedades do objeto IWiaItem ou IWiaItem2 para o dispositivo antes de uma transferência de dados.