WIA ミニドライバー
アプリケーションでは、Windows イメージ取得 (WIA) デバイスが、デバイス自体を表すルート項目を持つ IWiaItem オブジェクトまたは IWiaItem2 オブジェクトの階層ツリーとして表示されます。 WIA デバイスは、複数のアプリケーションで同時に使用できます。 したがって、各アプリケーションの IWiaItem オブジェクトまたは IWiaItem2 オブジェクトのビュー は 、別のアプリケーションのビューから独立している必要があります。 これは、2 つの異なる項目オブジェクトを持つことによって実現されます。 ドライバーは、WIA ドライバー サービス メソッドを使用して、ドライバー項目とも呼ばれる IWiaDrvItem インターフェイス オブジェクトのドライバー項目ツリーを作成します。 これらは、ドライバーが各ドライバーの内部項目を表すために使用するグローバル オブジェクトです。 アプリケーションが IWiaItem または IWiaItem2 オブジェクト (アプリケーション項目とも呼ばれます) を作成すると、このオブジェクトはドライバー項目ツリー内のドライバーの対応する IWiaDrvItem インターフェイス にリンクされます。 参照カウントは、次の規則に従って IWiaDrvItem インターフェイス オブジェクトで保持されます。
- ドライバーが IWiaDrvItem Interface オブジェクトをドライバー項目ツリーに追加すると、 IWiaDrvItem Interface オブジェクトの参照カウントがインクリメントされます。 これは通常、 IWiaMiniDrv::d rvInitializeWia または WIA_CMD_SYNCHRONIZE コマンドが処理されるときに行われます。
- ドライバーがドライバー項目ツリーから IWiaDrvItem Interface オブジェクトを削除すると、 IWiaDrvItem Interface オブジェクトの参照カウントがデクリメントされ、 IWiaDrvItem Interface オブジェクトがマークされ、デバイスに再びアクセスできなくなります。 これは通常、デバイスが切断されるか、アイテムが削除されたときに行われます。 対応する IWiaDrvItem Interface オブジェクトがドライバー項目ツリーから削除された場合でも、アプリケーションは IWiaItem オブジェクトまたは IWiaItem2 オブジェクトからプロパティを読み取りできます。
- IWiaItem オブジェクトまたは IWiaItem2 オブジェクトが作成されると、対応する IWiaDrvItem Interface オブジェクトにリンクされます。 IWiaDrvItem Interface オブジェクトの参照カウントがインクリメントされます。
- IWiaItem オブジェクトまたは IWiaItem2 オブジェクトが解放されると、対応する IWiaDrvItem Interface オブジェクトへのリンクが切断され、IWiaDrvItem Interface オブジェクトの参照カウントがデクリメントされます。
- IWiaDrvItem Interface オブジェクトの参照カウントが 0 になると、IWiaDrvItem Interface オブジェクトが削除されます。 これは、ルート項目を含むすべての IWiaDrvItem Interface オブジェクトに適用されます。 IWiaDrvItem Interface オブジェクトの参照カウントは、アプリケーション項目が参照せず、ドライバー項目ツリーにリンクされなくなった場合にのみ 0 になります。
この参照カウント スキームを使用すると、多くの IWiaItem オブジェクトまたは IWiaItem2 オブジェクトが、干渉なしで 1 つの IWiaDrvItem インターフェイス にリンクできます。 各 IWiaItem または IWiaItem2 には独自のプロパティ ストレージが含まれているため、アイテムが削除された後でも、アプリケーションはアイテムのプロパティを引き続き読み取ることができますが、デバイスへのアクセスを必要とする操作は成功しません。 項目プロパティは IWiaItem オブジェクトまたは IWiaItem2 オブジェクトに格納されるため、ドライバーは、データ転送の前に IWiaItem オブジェクトまたは IWiaItem2 オブジェクトのプロパティをデバイスに設定する必要があります。