WIA Minidriver
應用程式會看到 Windows 影像擷取 (WIA) 裝置,做為 IWiaItem 或 IWiaItem2 物件的階層式樹狀結構,其根專案代表裝置本身。 一個以上的應用程式可以同時使用 WIA 裝置。 因此,每個應用程式的 IWiaItem 或 IWiaItem2 物件檢視都必須與另一個應用程式的檢視無關。 這可藉由有兩個不同的專案物件來完成。 驅動程式會使用 WIA 驅動程式服務方法,建立 IWiaDrvItem 介面 物件的驅動程式專案樹狀結構,也稱為驅動程式專案。 這些是驅動程式用來代表每個驅動程式內部專案的全域物件。 當應用程式建立IWiaItem 或 IWiaItem2物件 (也稱為應用程式專案) 時,此物件會連結到驅動程式專案樹狀目錄中的對應IWiaDrvItem 介面。 根據下列規則, IWiaDrvItem 介面 物件會維護參考計數:
- 當驅動程式將 IWiaDrvItem Interface 物件新增至驅動程式專案樹狀結構時, IWiaDrvItem Interface 物件的參考計數會遞增。 這通常會發生在 IWiaMiniDrv::d rvInitializeWia 或處理WIA_CMD_SYNCHRONIZE命令時。
- 當驅動程式從驅動程式專案樹狀結構中移除 IWiaDrvItem Interface 物件時, IWiaDrvItem Interface 物件的參考計數會遞減,而且 會標示 IWiaDrvItem Interface 物件,使其無法再次存取裝置。 這通常會在裝置中斷連線或刪除專案時發生。 即使對應的IWiaDrvItem 介面物件已從驅動程式專案樹狀結構中移除對應的 IWiaDrvItem 介面物件,應用程式仍然可以從IWiaItem或IWiaItem2物件讀取屬性。
- 建立 IWiaItem 或 IWiaItem2 物件時,它會連結到對應的 IWiaDrvItem 介面 物件。 IWiaDrvItem Interface物件的參考計數會遞增。
- 當 IWiaItem 或 IWiaItem2 物件發行時,其對應 IWiaDrvItem 介面 物件的連結會嚴重刪除,而 IWiaDrvItem 介面 物件的參考計數會遞減。
- 如果 IWiaDrvItem Interface 物件的參考計數變成零, 則會刪除 IWiaDrvItem Interface 物件。 這適用于所有 IWiaDrvItem 介面 物件,包括根專案。 IWiaDrvItem Interface物件的參考計數只會在沒有任何應用程式專案參考它且不再連結到驅動程式專案樹狀結構時,才會變成零。
使用此參考計數配置,許多 IWiaItem 或 IWiaItem2 物件可能會連結至一個 IWiaDrvItem 介面 ,而不會干擾。 因為每個 IWiaItem 或 IWiaItem2 都包含自己的屬性儲存體,所以即使刪除專案之後,應用程式仍可繼續讀取專案屬性,但不需要存取裝置的作業將會成功。 因為專案屬性儲存在 IWiaItem 或 IWiaItem2 物件中,所以驅動程式必須在資料傳輸之前將 IWiaItem 或 IWiaItem2 物件的屬性設定為裝置。