Microsoft は、WMP11 がインストールされた XP で WPD と MTP がサポートされていると主張しており、実際にその通りです!
ただし、XP のデフォルトでは、カメラ デバイスはほとんどの場合、代わりに PTP ドライバー スタックをロードします。これは、[デバイス マネージャー] の [プロパティ] の [ドライバー] タブから [ドライバーの詳細] ページを見ると確認できます。
- C:\Windows\System32\ptpusb.dll
- C:\Windows\System32\ptpusd.dll
つまり、カメラ ベンダーが、XP 上のデバイス用に WPD 互換のカスタム INF ファイルを慎重に提供していない限りです。おそらく WMP10/11 に依存しているため、ほとんどの場合はそうではありません。
ただし、独自のカスタム INF を作成して MTP を有効にするのは比較的簡単です。詳細については、mtpdev.chm ヘルプ ファイルの「MTP デバイス用のカスタム INF ファイルの提供」セクションのMicrosoft Media Transfer Protocol Porting Kitに記載されています。
ただし、そこにある詳細はいくぶん不完全なようで、Windows Media Player 11 と共にインストールされた C:\Windows\Inf\WpdMtp.inf のコメントに必要なセクションについてさらに情報が必要です。
;;******************************************************************************
;; The following are to be used in vendor specific "Includes" and "Needs" sections.
;; Specifically, the INF should contain:
;;
;; [DDInstall]
;; Include = wpdmtp.inf
;; Needs = WPD.MTP
;;
;; [DDInstall.hw]
;; Include = wpdmtp.inf
;; Needs = WPD.MTP.Registration <- includes all default legacy API and autoplay registration for the device
;; - OR -
;; Needs = WPD.MTP.RegistrationBasic <- only do minimum registration, no legacy API or autoplay
;;
;; [DDInstall.Services]
;; Include = wpdmtp.inf
;; Needs = WPD.MTP.Services
;;
;; [DDInstall.CoInstallers]
;; Include = wpdmtp.inf
;; Needs = WPD.MTP.CoInstallers
;;
;; [DDInstall.Wdf]
;; Include = wpdmtp.inf
;; Needs = WPD.MTP.Wdf
;; UmdfServiceOrder=WpdMtpDriver
;;
;;******************************************************************************
たとえば、Nikon D90 の場合、次の INF ファイルを作成できます。
[Version]
Signature="$WINDOWS NT$"
Class=WPD
ClassGUID={EEC5AD98-8080-425f-922A-DABF3DE3F69A}
Provider=%Provider%
DriverVer=02/22/2006,5.2.5326.4762
[Manufacturer]
%MfgName%=Nikon
[Nikon]
%Nikon.DeviceDesc%=Nikon_MTP, USB\VID_04B0&PID_0421
[Nikon_MTP]
Include = wpdmtp.inf
Needs = WPD.MTP
[Nikon_MTP.hw]
Include = wpdmtp.inf
Needs = WPD.MTP.RegistrationBasic
[Nikon_MTP.Services]
Include = wpdmtp.inf
Needs = WPD.MTP.Services
[Nikon_MTP.CoInstallers]
Include = wpdmtp.inf
Needs = WPD.MTP.CoInstallers
[Nikon_MTP.Wdf]
Include = wpdmtp.inf
Needs = WPD.MTP.Wdf
UmdfServiceOrder=WpdMtpDriver
[Strings]
Nikon.DeviceDesc = "Nikon D90 MTP Device"
MfgName = "Nikon"
Provider = "Nikon"
さまざまなデバイスをサポートするには、[Nikon] セクションの下で、デバイスの正しい PID と VID を変更または追加します。これらは、デバイス マネージャーの [詳細] タブで、ドロップダウンから [Hadrware Ids] を選択して見つけることができます。カメラが別のメーカーのものである場合は、すべての参照を「Nikon」に変更することもできます。
メモ帳で INF ファイルを作成したら、NikonD90.INF などの適切な名前で保存します。それで:
- Windows デバイス マネージャーで、カメラ デバイスを右クリックし、[ドライバーの更新] をクリックします。
- Windows Update の検索を求められたら、[いいえ、今回は接続しません] を選択します。
- 「一覧または特定の場所からインストールする (詳細)」を選択します。
- 「検索しないで、インストールするドライブを選択します」を選択します。
- 「ディスク使用」をクリックします。
- [ブラウザー] をクリックし、上記で作成した INF ファイルを保存したフォルダーに移動します。
- INF ファイルを選択すると、MTP ドライバーがインストールされます。
デバイス マネージャーで、カメラ デバイスが [イメージング デバイス] から移動し、代わりに [ポータブル デバイス] の下に表示されていることがわかります。また、ドライバーの詳細には、(以前の PTP ではなく) 汎用 WPD MTP クラス ドライバーが使用されていることを示す次のファイルが表示されます。
- C:\Windows\System32\wpdusb.dll
- C:\Windows\System32\wudfrd.dll
これで、IPortableDeviceManager.GetDevices を使用して MTP デバイスを正常に列挙し、他のすべての API 関数を使用してカスタム MTP コマンドを送信できるようになります。詳細については、dimeby8による MSDN の投稿を参照してください。
上記のソリューションを使用すると、コードを変更することなく、32 ビットまたは 64 ビットの Windows XP から Windows 7 で動作する共通 API を使用してアプリケーションを構築できます。