WIA(Windows Image Acquisition)
アセンブラの魔女 ⧫ Windows ⧫ WIA(Windows Image Acquisition)
アセンブラの魔女 ⧫ Windows ⧫ WIA(Windows Image Acquisition)

 WIAはカメラやスキャナデバイス制御のための統一されたインターフェースを提供するために、Windows上の機能のひとつです。 WIAはTWAINやPTP等のプロトコルを抽象化し、これらのプロトコルに依存しないアプリケーションを作ることができるようにします。

WIAの概要
アーキテクチャ
WIAイベント
WIA関連のレジストリ
APIを使ったWIA制御
WIA Automation Layer

 WIAはカメラやスキャナデバイス制御のための統一されたインターフェースを提供するために、Windows上の機能のひとつです。 WIAはTWAINやPTP等のプロトコルを抽象化し、これらのプロトコルに依存しないアプリケーションを作ることができるようにします。 WIAはAPIとDDI(デバイスドライバーインターフェース)の両方の役割を担います。 WIA APIを使うアプリケーションはWindows XP以降が必要です。 WIAはVisual C++、Visual Basic、VBScript等さまざまな環境で利用することができます。

WIAを使って制御できるデバイスWIAは以下のような(WIA対応)のデバイスを制御することができます
デジタルスチルカメラカメラ内の画像オブジェクトにアクセスすることができます
USBカメラUSBカメラ内の画像オブジェクトにアクセスしたり、ライブビューを表示することができます。※この機能はWindows XPまでサポートされ、Windows Vista以降はサポートされなくなりました
スキャナスキャン動作条件を設定して、スキャンを実行し、画像を取得することができます

 WIAはクライアントアプリケーションの堅牢なオペレーションを確保するために、COM out-of-processサーバーとして実装されます。 多くのアウトオブプロセスサーバーのアプリケーションと異なり、WIAは自分自身の転送メカニズムIWiaDataTransferを提供することで、 データ転送時のパフォーマンス低下を回避します。WIAは3つのメインコンポーネント、デバイスマネージャ、ミニドライバーサービスライブラリ、デバイスミニドライバーを持ちます。

デバイスマネージャイメージングデバイスを列挙、デバイスプロパティを取得、デバイスのイベントをセットアップ、デバイスオブジェクトを生成します
ミニドライバーサービスライブラリデバイスに依存するすべてのサービスを実装します
デバイスミニドライバーWIAプロパティとコマンドを特定のデバイスにマップします

HKEY_LOCAL_MACHINE/
 SYSTEM/
  CurrntControlSet/
   Control/<
    Class/
     {6BDD1FC6-810F-11D0-08002BE2092F}

 このレジストリはデバイスごとの情報を保持しているようです。{6BDD1FC6-810F-11D0-08002BE2092F}の下にはデバイスを表現するアイテムとすべてのWIAデバイスに共通のプロパティが置かれます。次に{6BDD1FC6-810F-11D0-08002BE2092F}とその直下のアイテムの例を示します。

 
{6BDD1FC6-810F-11D0-08002BE2092F}/(既定)
                                 /Class
                                 /Icon
                                 /Installer32
                                 /TroubleShooter-0
                                 /0000/
                                 /0001/
                                 /0002/
                                 /0003/
..
                                 /0009/
                                 /0010/
..

 それぞれのデバイスは4桁の10進数で表現されています。それぞれのデバイスを表現するアイテムにはデバイスのプロパティを表現するアイテムが置かれます。次にiPhoneの例を示します(この例でiPhoneはデバイスを表現するアイテム0000によって表現されています)。

 
0000/(既定)
    /Capabilities
    /CreateFileName
    /DeviceID
    /DeviceSubType
    /DeviceType
    /DriverDate
    /DriverDateData
    /DriverDesc
    /DriverVersion
    /FriendlyName
    /HardwareConfig
    /ICMProfiles
    /InfPath
    /InfSection
    /IsPnP
    /Label
    /MatchingDeviceId
    /ProviderName
    /SubClass
    /USDClass
    /Vendor

(既定)REG_SZイメージングデバイス
ClassREG_SZImage
IconREG_SZ0
Installer32REG_SZsti_ci.dll,ClassInstall
TroubleShooter-0REG_SZhcp://help/tshoot/tsInputDev.htm

 以下はiPhoneの例です。

(既定)REG_SZ-
CapabilitiesREG_DWORD0x35
CreateFilNameREG_SZ-
DeviceIDREG_SZ{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0000
DeviceSubTypeREG_DWORD0x0
DeviceTypeREG_DWORD0x2
DriverDateREG_SZ7-1-2001
DriverDateDataREG_BINARY00 80 62 c5 c0 01 c1 01
DriverDescREG_SZApple iPhone
DriverVersionREG_SZ5.1.2600.0
FriendlyNameREG_SZiPhone
HardwareConfigREG_BINARY04
ICMProfilesREG_SZsRGB Color Space Profile.icm
InfPathREG_SZptpusb.inf
InfSectionREG_SZPTP
IsPnPREG_BINARY0x1
LabelREG_SZiPhone
MatchingDeviceIdREG_SZusb\class_06&subclass_01&prot_01
ProviderNameREG_SZMicrosoft
SubClassREG_SZStillImage
USDClassREG_SZ{B5EE90B0-D5C5-11D2-82D5-00C04F8EC183}
VendorREG_SZ汎用
Events/(既定)REG_SZ-
Events/Connected/(既定)REG_SZデジタルカメラ接続中
Events/Connected/DefaultHandlerREG_SZ{5F4BAAD0-4D59-4FCD-B213-783CE7A92F22}
Events/Connected/GUIDREG_SZ{A28BBADF-64B6-11d2-A231-00C04FA31809}
Events/Connected/LaunchApplictionsREG_SZ*
Events/Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/(既定)REG_SZ-
Events/Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/CmdlineREG_SZ"\"C:\_プログラム開発\MyProgram_new\画像処理\ImageAnalyzer\ImageAnalyzer\debug\" __
Events/Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/DescREG_SZDESCRIPTION
Events/Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/IconREG_SZ-
Events/Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/NameREG_SZNAME2
Events/Connected/{5F4BAAD0-4D59-4FCD-B213-783CE7A92F22}/(既定)REG_SZ-
Events/Connected/{5F4BAAD0-4D59-4FCD-B213-783CE7A92F22}/DescREG_SZInternal
Events/Connected/{5F4BAAD0-4D59-4FCD-B213-783CE7A92F22}/IconREG_SZInternal
Events/Connected/{5F4BAAD0-4D59-4FCD-B213-783CE7A92F22}/NameREG_SZInternal
Events/Disconnected/(既定)REG_SZデジタル カメラ切断
Events/Disconnected/GUIDREG_SZ{143E4E83-6497-11d2-A231-00C04FA31809}
Events/Disconnected/LaunchApplicationsREG_SZ*

HKEY_LOCAL_MACHINE/
 SYSTEM/
  CurrntControlSet/
   Control/Class/
    StillImage

 このレジストリはStillImageクラス(STIデバイス)の情報が置かれるようです。以下で示すレジストリの項目や値は環境によって異なるかもしれません。

 HKEY_LOCAL_MACHINE/../StillImage以下は、次の階層構造でレジストリが配置されます。

StillImage/Debug/
StillImage/DeviceNameStore/
StillImage/Events/
StillImage/Logging/
StillImage/Trace/
StillImage/WiaVideo/

 StillImage/直下には、次のレジストリが置かれます。

(既定)REG_SZ

 StillImage/Debug以下には、次のレジストリが置かれます。これらはStill Image関連のDLLのデバッグ用のレジストリと思われますが詳細は不明です。

(既定)REG_SZ-
DebugFileSizeLimitREG_DWORD0x80000
ptpusd.dll/(既定)REG_SZ-
ptpusd.dll/DebugFlagsREG_DWORD0x60000000
sti_ci.dll/(既定)REG_SZ-
sti_ci.dll/DebugFlagsREG_DWORD0x00000001
wiadss.dll/(既定)REG_SZ-
wiadss.dll/DebugFlagsREG_DWORD0x00000001
wiaservc.dll/(既定)REG_SZ-
wiaservc.dll/DebugFlagsREG_DWORD0x00000001
wiafax.dll/(既定)REG_SZ-
wiafax.dll/DebugFlagsREG_DWORD0x00000001
wiavideo.dll/(既定)REG_SZ-
wiavideo.dll/DebugFlagsREG_DWORD0x00000001
wiavusd.dll/(既定)REG_SZ-
wiavusd.dll/DebugFlagsREG_DWORD0x00000001

 StillImage/DeviceNameStore以下には、次のレジストリが置かれます。

(既定)REG_SZ
{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}/(既定)REG_SZ

 StillImage/Events以下には、次のレジストリが置かれます。

(既定)REG_SZ-
Connected/(既定)REG_SZ-
Connected/GUIDREG_SZ{A28BBADE-64B6-11D2-A231-00C04FA31809}
Connected/LaunchApplicationsREG_SZ*
Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/{既定}REG_SZ-
Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/CmdlineREG_SZ"\"C:\_プログラム開発\MyProgram_new\画像処理\ImageAnalyzer\ImageAnalyzer\debug\" __
Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/DescREG_SZDESCRIPTION
Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/IconREG_SZ-
Connected/{5A233F84-4555-4EE1-8A8E-A18A5BBAD190}/NameREG_SZNAME2
Connected/{7CF3BA90-7F78-481B-8011-7EA81760A44A}/{既定}REG_SZ-
Connected/{7CF3BA90-7F78-481B-8011-7EA81760A44A}/CmdlineREG_SZ"\"C:\tmp\WIARegisterEventCallbackProgram.exe\" reg
Connected/{7CF3BA90-7F78-481B-8011-7EA81760A44A}/DescREG_SZDESCRIPTION
Connected/{7CF3BA90-7F78-481B-8011-7EA81760A44A}/IconREG_SZ-
Connected/{7CF3BA90-7F78-481B-8011-7EA81760A44A}/NameREG_SZNAME
Connected/{D13E3F25-1688-45A0-9743-759EB35CDF9A}/{既定}REG_SZ-
Connected/{D13E3F25-1688-45A0-9743-759EB35CDF9A}/DescREG_SZ画像をカメラまたはスキャナからダウンロードします
Connected/{D13E3F25-1688-45A0-9743-759EB35CDF9A}/IconREG_SZwiaacmgr.exe,-2
Connected/(既定)REG_SZ-
Connected/GUIDREG_SZ{143E4E83-6497-11D2-A231-00C04FA31809}
Connected/LaunchApplicationsREG_SZ*
Disconnected/{D13E3F25-1688-45A0-9743-759EB35CDF9A}/NameREG_SZMicrosoft スキャナとカメラのウィザード

 StillImage/ScanButton以下には、次のレジストリが置かれます。

(既定)REG_SZ-
GUIDREG_SZ{A6C5A715-8C6E-11D2-977A-0000F87A926F}
LaunchApplicationsREG_SZ*
{D13ED25-1688-45A0-9743-759EB35CDF9A}/(既定)REG_SZ-
{D13ED25-1688-45A0-9743-759EB35CDF9A}/DescREG_SZ画像をカメラまたはスキャナからダウンロードします
{D13ED25-1688-45A0-9743-759EB35CDF9A}/IconREG_SZwiaacmgr.exe,-2
NameREG_SZMicrosoft スキャナとカメラのウィザード

 StillImage/Logging以下には、次のレジストリが置かれます。

(既定)REG_SZ-
STICLI/(既定)REG_SZ静止画像クライアント アプリケーション
STICLI/LevelREG_SZ4
STIMON/(既定)REG_SZStill Image Monitoring Process
STICLI/LevelREG_SZ4

 StillImage/Trace以下には、次のレジストリが置かれます。

(既定)REG_SZ-
DefaultEnableObjectTrackingREG_DWORD0x00000001
DefaultMaxTraceArraySizeREG_DWORD0x0000000a
DefaultTraceFlagsREG_DWORD0x00000401
DefaultTraceLevelREG_DWORD0x00000000
DefaultTraceMaskREG_DWORD0x00000000
HeapOptionsREG_DWORD0x00000018
MaxFileSizeREG_DWORD0x00100000
wpdconns.dll/(既定)REG_SZ-
wpdconns.dll/EnableObjectTrackingREG_DWORD0x00000001
wpdconns.dll/HeapOptionsREG_DWORD0x00000018
wpdconns.dll/MaxTraceArraySizeREG_DWORD0x0000000a
wpdconns.dll/TraceFlagsREG_DWORD0x00000401
wpdconns.dll/TraceLevelREG_DWORD0x00000000
wpdconns.dll/TraceMaskREG_DWORD0x00000000
WpdMtp.dll/(既定)REG_SZ-
WpdMtp.dll/EnableObjectTrackingREG_DWORD0x00000001
WpdMtp.dll/HeapOptionsREG_DWORD0x00000018
WpdMtp.dll/MaxTraceArraySizeREG_DWORD0x0000000a
WpdMtp.dll/TraceFlagsREG_DWORD0x00000401
WpdMtp.dll/TraceLevelREG_DWORD0x00000000
WpdMtp.dll/TraceMaskREG_DWORD0x00000000
WpdMtpUS.dll/(既定)REG_SZ-
WpdMtpUS.dll/EnableObjectTrackingREG_DWORD0x00000001
WpdMtp.dll/HeapOptionsREG_DWORD0x00000018
WpdMtpUS.dll/MaxTraceArraySizeREG_DWORD0x0000000a
WpdMtpUS.dll/TraceFlagsREG_DWORD0x00000401
WpdMtpUS.dll/TraceLevelREG_DWORD0x00000000
WpdMtpUS.dll/TraceMaskREG_DWORD0x00000000
wpdsp.dll/(既定)REG_SZ-
wpdsp.dll/EnableObjectTrackingREG_DWORD0x00000001
wpdsp.dll/HeapOptionsREG_DWORD0x00000018
wpdsp.dll/MaxTraceArraySizeREG_DWORD0x0000000a
wpdsp.dll/TraceFlagsREG_DWORD0x00000401
wpdsp.dll/TraceLevelREG_DWORD0x00000000
wpdsp.dll/TraceMaskREG_DWORD0x00000000

 StillImage/WiaVideo以下には、次のレジストリが置かれます。

(既定)REG_SZ-
UseVMRREG_DWORD0x00000000

 WIAデバイスの発生するイベントをアプリケーションが捕捉するには「アプリケーションを特定のイベントに登録する」必要があります。 アプリケーションに通知されるイベントは全てのWIAデバイスを対象とすることもできるし、特定のWIAデバイスだけを対象とすることもできます。また、アプリケーションが起動していないとき、アプリケーションがあらかじめ登録しておいたイベントが発生した場合、WIAのランタイムシステムは登録されたアプリケーションを起動することもできます。イベントの補足の方法(イベントハンドラの実装方法)はWIA Automation Layerを使ったアプリケーションでことなります。

▼ Property
記事情報
datePublished2011-01-01
dateModified2018-06-20
authorアセンブラの魔女
headlineWIA(Windows Image Acquisition)関連記事のページです
keywordsWIA
keywordsWindows Image Acquisition
keywordsWindows
publisher name= wiredFish, logo.name= wiredFish, logo.url= https://books-nekoya.jp/Programming/chigu-hagu-title-01.png size= 208 pixel x 50 pixel
image.url url= https://books-nekoya.jp/Programming/chigu-hagu-title-01.png , size= 208 pixel x 50 pixel