Microsoft утверждает, что WPD и MTP поддерживаются в XP с установленным WMP11, и это действительно так!
Однако по умолчанию в XP камера, скорее всего, вместо этого загрузит стек драйверов PTP. Вы можете проверить это, посмотрев на страницу сведений о драйвере в Диспетчере устройств, на вкладке «Свойства», где вы должны увидеть:
- C: \ Windows \ System32 \ ptpusb.dll
- C: \ Windows \ System32 \ ptpusd.dll
То есть, если только поставщик вашей камеры не предоставил для вашего устройства на XP специальный файл INF, совместимый с WPD. Большинство этого не сделали, вероятно, из-за того, что полагались на WMP10 / 11.
Однако относительно легко создать собственный пользовательский INF для включения MTP, и подробности для этого приведены в Комплект для переноса протокола передачи мультимедиа Microsoft в файле справки mtpdev.chm в разделе« Предоставление настраиваемого файла INF для устройства MTP ».
Однако детали там кажутся несколько неполными, и есть дополнительная информация о разделах, необходимых в комментариях к C: \ Windows \ Inf \ WpdMtp.inf, установленному с Windows Media Player 11:
;;******************************************************************************
;; 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 попросит выполнить поиск в Центре обновления Windows.
- Выберите «Установить из списка или из определенного места (Дополнительно)».
- Выберите «Не искать, я выберу диск для установки».
- Нажмите «Установить с диска».
- Нажмите «Браузер» и перейдите в папку, в которой вы сохранили созданный ранее INF-файл.
- Выберите файл INF, и он должен установить драйверы MTP.
Теперь в диспетчере устройств вы должны увидеть, что камера перемещена из «Устройства обработки изображений» и теперь отображается в разделе «Переносные устройства». Также в сведениях о драйвере вы должны увидеть следующие файлы, указывающие на то, что используются общие драйверы класса WPD MTP (вместо ранее использовавшегося PTP):
- C: \ Windows \ System32 \ wpdusb.dll
- C: \ Windows \ System32 \ wudfrd.dll
Теперь вы должны иметь возможность успешно перечислять свое устройство MTP с помощью IPortableDeviceManager.GetDevices и использовать все другие функции API для отправки настраиваемых команд MTP. Дополнительные сведения см. В сообщениях MSDN от dimeby8.
Вышеупомянутое решение позволяет создавать приложения с общим API, которые работают от Windows XP до Windows 7 в 32- или 64-разрядной версии без изменения кода.
person
pcbbc
schedule
15.02.2011