WIA Minidriver
Le applicazioni visualizzano dispositivi Windows Image Acquisition (WIA) come albero gerarchico di oggetti IWiaItem o IWiaItem2 con l'elemento radice che rappresenta il dispositivo stesso. I dispositivi WIA possono essere usati simultaneamente da più applicazioni. È quindi necessario che la visualizzazione di ogni applicazione di un oggetto IWiaItem o IWiaItem2 sia indipendente dalla visualizzazione di un'altra applicazione. Questa operazione viene eseguita con due oggetti elemento diversi. Il driver crea l'albero degli elementi driver degli oggetti Interfaccia IWiaDrvItem , chiamati anche elementi driver, usando i metodi dei servizi driver WIA. Questi sono oggetti globali usati dal driver per rappresentare gli elementi interni di ogni driver. Quando un'applicazione crea un oggetto IWiaItem o IWiaItem2 (chiamato anche elemento dell'applicazione), questo oggetto è collegato all'interfaccia IWiaDrvItem corrispondente nell'albero degli elementi del driver. Un conteggio dei riferimenti viene mantenuto nell'oggetto Interfaccia IWiaDrvItem soggetto alle regole seguenti:
- Quando un driver aggiunge un oggetto IWiaDrvItem Interface all'albero degli elementi del driver, viene incrementato il conteggio dei riferimenti dell'oggetto IWiaDrvItem Interface . Questo avviene in genere durante LWiaMiniDrv::d rvInitializeWia o quando viene elaborato un comando WIA_CMD_SYNCHRONIZE.
- Quando un driver rimuove un oggetto Interfaccia IWiaDrvItem dall'albero degli elementi del driver, il conteggio dei riferimenti dell'oggetto Interfaccia IWiaDrvItem viene decrementato e l'oggetto Interfaccia IWiaDrvItem viene contrassegnato in modo che non possa accedere di nuovo al dispositivo. Questo avviene in genere quando un dispositivo viene disconnesso o un elemento viene eliminato. Le applicazioni sono ancora in grado di leggere le proprietà da un oggetto IWiaItem o IWiaItem2 anche quando l'oggetto IWiaDrvItem Interface corrispondente è stato rimosso dall'albero degli elementi del driver.
- Quando viene creato un oggetto IWiaItem o IWiaItem2 , viene collegato a un oggetto IWiaDrvItem Interface corrispondente. Il numero di riferimenti dell'oggetto Interfaccia IWiaDrvItem viene incrementato .
- Quando viene rilasciato un oggetto IWiaItem o IWiaItem2 , il collegamento al relativo oggetto IWiaDrvItem Interface è grave e il conteggio dei riferimenti dell'oggetto Interface IWiaDrvItem viene decrementato.
- Se il conteggio dei riferimenti di un oggetto IWiaDrvItem Interface passa a zero, l'oggetto Interfaccia IWiaDrvItem viene eliminato. Ciò si applica a tutti gli oggetti Interfaccia IWiaDrvItem , incluso l'elemento radice. Il conteggio dei riferimenti dell'oggetto IWiaDrvItem Interface passa solo a zero quando non fanno riferimento agli elementi dell'applicazione e non è più collegato all'albero degli elementi del driver.
Usando questo schema di conteggio dei riferimenti, molti oggetti IWiaItem o IWiaItem2 possono collegarsi a un'interfaccia IWiaDrvItem senza interferenze. Poiché ogni IWiaItem o IWiaItem2 contiene la propria risorsa di archiviazione delle proprietà, un'applicazione può continuare a leggere le proprietà dell'elemento anche dopo l'eliminazione di un elemento, ma nessuna operazione che richiede l'accesso al dispositivo avrà esito positivo. Poiché le proprietà dell'elemento vengono archiviate nell'oggetto IWiaItem o IWiaItem2, il driver deve impostare le proprietà dell'oggetto IWiaItem o IWiaItem2 nel dispositivo prima del trasferimento dei dati.