; Installation inf for devices supporting Media Transfer Protocol (MTP)
;
; Copyright (c) Microsoft Corporation.
;

[SourceDisksNames]
3426=windows cd

[SourceDisksFiles]
wpdmtpdr.dll 		= 3426
wpdmtp.dll 		= 3426
wpdmtpus.dll 		= 3426
wpdmtpip.dll 		= 3426
wpdmtpbt.dll 		= 3426

[Version]
Signature="$WINDOWS NT$"
Class=WPD
ClassGUID={EEC5AD98-8080-425f-922A-DABF3DE3F69A}
Provider=%Msft%
DriverVer = 06/21/2006,10.0.22621.3672
PnpLockdown=1

[ControlFlags]
BasicDriverOk=*

[DestinationDirs]
MTP.Files.XPRT_USB = 11
MTP.Files.XPRT_IP = 11
MTP.Files.XPRT_BT = 11
MTP.Files.Core = 11
MTP.Files.UMDFDDriver = 12,UMDF ; copy to system32\drivers\umdf

[Manufacturer]
%GenericMfg%=Generic,NTamd64

[Generic.NTamd64]
%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP
%GenericMTP.DeviceDesc%=MTP, USB\Class_06&SubClass_01&Prot_01
%GenericMTPIP.DeviceDesc%=MTPIP, umb\urn:microsoft-com:device:mtp:1
%GenericMTPBT.DeviceDesc%=MTPBT, BthMtpEnum\{9518e5ca-f6af-464b-9907-a97433641968}
; Kodak
%GenericMTP.DeviceDesc%=MTP, USB\VID_040A&PID_0140
%GenericMTP.DeviceDesc%=MTP, USB\VID_040A&PID_0200
%GenericMTP.DeviceDesc%=MTP, USB\VID_040A&PID_0121
%GenericMTP.DeviceDesc%=MTP, USB\VID_040A&PID_0160

; For use with INF Include/Needs, see below for details
%GenericMTP.DeviceDesc%=WPD.MTP
%GenericMTP.DeviceDesc%=WPD.MTP.Registration
%GenericMTP.DeviceDesc%=WPD.MTP.RegistrationBasic
%GenericMTPIP.DeviceDesc%=WPD.MTPIP
%GenericMTPIP.DeviceDesc%=WPD.MTPIP.Registration
%GenericMTPIP.DeviceDesc%=WPD.MTPIP.RegistrationBasic

;;******************************************************************************
;;
;; MTP with USB Transport
;; ======================
;; 
;; The following are to be used in vendor specific "Includes" and "Needs" sections.
;; Specifically, the vendor INF should contain:
;;
;; [DDInstall]
;; Include = wpdmtp.inf, WINUSB.INF
;; Needs   = WPD.MTP, WINUSB.NT      
;;
;; [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
;;
;;******************************************************************************

[WPD.MTP]
CopyFiles = MTP.Files.XPRT_USB, MTP.Files.Core, MTP.Files.UMDFDDriver
AddReg = MTP.RegisterComServers

[WPD.MTP.Registration]
Needs = WPD.MTP.Registration.Hw

[WPD.MTP.Registration.Hw]
AddReg    = WDF.Registration, MTP.AutoPlayRegistration, MTP.LEGACY.Registration, MTPUSB.Transport.Registration

[WPD.MTP.RegistrationBasic]
Needs = WPD.MTP.RegistrationBasic.Hw

[WPD.MTP.RegistrationBasic.Hw]
AddReg    = WDF.Registration, MTPUSB.Transport.Registration

[WPD.MTP.Services]
AddService=WUDFWpdMtp, 0x000001fa, WUDFWpdMtp_ServiceInstall
AddService=WinUsb, 0x000001f8, WinUsb_ServiceInstall

[WPD.MTP.CoInstallers]
AddReg   = WDF.CoInstaller

[WPD.MTP.Wdf]
UmdfService=WpdMtpDriver,WpdMtpDriver_Install
UmdfImpersonationLevel=Impersonation

;;******************************************************************************
;; Inbox MTP USB section
;;******************************************************************************

[MTP.NT]
Include = WINUSB.INF   ; Import section from winusb.inf
Needs   = WINUSB.NT    ; Run the CopyFil and AddReg directives in WinUsb.inf
CopyFiles = MTP.Files.XPRT_USB, MTP.Files.Core, MTP.Files.UMDFDDriver
AddReg = MTP.RegisterComServers
AddProperty=MTP.AddProp

[MTP.NT.hw]
AddReg    = WDF.Registration, MTP.AutoPlayRegistration, MTP.LEGACY.Registration, MTPUSB.Transport.Registration, TSRedirection.Registration

[MTP.NT.Services]
AddService=WUDFWpdMtp, 0x000001fa, WUDFWpdMtp_ServiceInstall
AddService=WinUsb, 0x000001f8, WinUsb_ServiceInstall   

[MTP.NT.CoInstallers]
AddReg = WDF.CoInstaller

[MTP.NT.Wdf]
UmdfService=WpdMtpDriver,WpdMtpDriver_Install
UmdfServiceOrder=WpdMtpDriver
UmdfKernelModeClientPolicy=AllowKernelModeClients
UmdfImpersonationLevel=Impersonation

[MTPUSB.Transport.Registration]
HKR,"WpdMtpDriver","TransportClassID",0x0,"{34C445BA-07EB-4b5d-8EE9-F66BB9DA403B}"

;;******************************************************************************
;;
;; MTP with IP Transport
;; =====================
;;
;; The following are to be used in vendor specific "Includes" and "Needs" sections.
;; Specifically, the INF should contain:
;;
;; [DDInstall]
;; Include = wpdmtp.inf
;; Needs   = WPD.MTPIP
;;
;; [DDInstall.hw]
;; Include = wpdmtp.inf
;; Needs   = WPD.MTPIP.Registration       <- includes all default legacy API and autoplay registration for the device
;;  - OR - 
;; Needs   = WPD.MTPIP.RegistrationBasic  <- only do minimum registration, no legacy API or autoplay
;;
;; [DDInstall.Services]
;; Include = wpdmtp.inf
;; Needs   = WPD.MTPIP.Services
;;
;; [DDInstall.CoInstallers]
;; Include = wpdmtp.inf
;; Needs = WPD.MTPIP.CoInstallers
;;
;; [DDInstall.Wdf]
;; Include = wpdmtp.inf
;; Needs = WPD.MTPIP.Wdf
;; UmdfServiceOrder=WpdMtpDriver
;;
;;******************************************************************************

[WPD.MTPIP]
CopyFiles = MTP.Files.XPRT_IP, MTP.Files.Core, MTP.Files.UMDFDDriver
AddReg = MTPIP.RegisterComServers

[WPD.MTPIP.Registration]
Needs = WPD.MTPIP.Registration.Hw

[WPD.MTPIP.Registration.Hw]
AddReg    = WDF.Registration, PTP.AutoPlayRegistration, PTP.LEGACY.Registration, MTPIP.Transport.Registration

[WPD.MTPIP.RegistrationBasic]
Needs = WPD.MTPIP.RegistrationBasic.Hw

[WPD.MTPIP.RegistrationBasic.Hw]
AddReg    = WDF.Registration, MTPIP.Transport.Registration

[WPD.MTPIP.Services]
AddService=WUDFWpdMtp, 0x000001fa, WUDFWpdMtp_ServiceInstall

[WPD.MTPIP.CoInstallers]
AddReg   = WDF.CoInstaller

[WPD.MTPIP.Wdf]
UmdfService=WpdMtpDriver,WpdMtpDriver_Install
UmdfImpersonationLevel=Impersonation

;;******************************************************************************
;; Inbox MTP IP section
;;******************************************************************************

[MTPIP.NT]
CopyFiles = MTP.Files.XPRT_IP, MTP.Files.Core, MTP.Files.UMDFDDriver
AddReg = MTPIP.RegisterComServers
AddProperty=MTP.AddProp

[MTPIP.NT.hw]
AddReg    = PTP.AutoPlayRegistration, PTP.LEGACY.Registration, MTPIP.Transport.Registration, TSRedirection.Registration

[MTPIP.NT.Services]
AddService=WUDFWpdMtp, 0x000001fa, WUDFWpdMtp_ServiceInstall

[MTPIP.NT.CoInstallers]
AddReg = WDF.CoInstaller

[MTPIP.NT.Wdf]
UmdfService=WpdMtpDriver,WpdMtpDriver_Install
UmdfServiceOrder=WpdMtpDriver
UmdfKernelModeClientPolicy=AllowKernelModeClients
UmdfImpersonationLevel=Impersonation

[MTPIP.Transport.Registration]
HKR,"WpdMtpDriver","TransportClassID",0x0,"{90ED8EEA-1605-4c46-8314-EED94AAA588B}"

;;******************************************************************************
;; Inbox MTP BT section
;;******************************************************************************

[MTPBT.NT]
CopyFiles = MTP.Files.XPRT_BT, MTP.Files.Core, MTP.Files.UMDFDDriver
AddReg = MTPBT.RegisterComServers
AddProperty=MTP.AddProp

[MTPBT.NT.hw]
AddReg = MTP.AutoPlayRegistration, MTP.LEGACY.Registration, MTPBT.Transport.Registration, TSRedirection.Registration

[MTPBT.NT.Services]
AddService=WUDFWpdMtp, 0x000001fa, WUDFWpdMtp_ServiceInstall

[MTPBT.NT.CoInstallers]
AddReg = WDF.CoInstaller

[MTPBT.NT.Wdf]
UmdfService=WpdMtpDriver,WpdMtpDriver_Install
UmdfServiceOrder=WpdMtpDriver
UmdfKernelModeClientPolicy=AllowKernelModeClients
UmdfImpersonationLevel=Impersonation

[MTPBT.Transport.Registration]
HKR,"WpdMtpDriver","TransportClassID",0x0,"{87a0faf7-bb16-458d-b3eb-2423e79e1e0c}"

;;******************************************************************************
;; Common section
;;   1. File copy 
;;   2. Register COM servers
;;   3. AutoPlay 
;;   4. WDF 
;;   5. Registration
;;   6. WMDM/WIA legacy support
;;   7. Kernel mode service (WinUsb)
;;   8. Driver update notification
;;******************************************************************************

[MTP.Files.XPRT_IP]
WpdMtpIP.dll,,,0x0100

[MTP.Files.XPRT_USB]
WpdMtpUS.dll,,,0x0100

[MTP.Files.XPRT_BT]
WpdMtpbt.dll,,,0x0100

[MTP.Files.Core]
WpdMtp.dll,,,0x0100

[MTP.Files.UMDFDDriver]
WpdMtpDr.dll,,,0x0100


[MTP.RegisterComServers]
; wpdmtpus.dll
HKCR,CLSID\{34C445BA-07EB-4b5d-8EE9-F66BB9DA403B},,,"MtpUsbscanTransport Class"
HKCR,CLSID\{34C445BA-07EB-4b5d-8EE9-F66BB9DA403B}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtpus.dll"
HKCR,CLSID\{34C445BA-07EB-4b5d-8EE9-F66BB9DA403B}\InprocServer32,ThreadingModel,,"Both"
; wpdmtp.dll
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90},,,"WindowsMtp Class"
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtp.dll"
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90}\InprocServer32,ThreadingModel,,"Both"
; wpdmtpdr.dll
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70},,,"WpdMtpDriver Class"
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtpdr.dll"
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70}\InprocServer32,ThreadingModel,,"Free"

[MTPIP.RegisterComServers]
; wpdmtpip.dll
HKCR,CLSID\{90ED8EEA-1605-4c46-8314-EED94AAA588B},,,"MtpIpTransport Class"
HKCR,CLSID\{90ED8EEA-1605-4c46-8314-EED94AAA588B}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtpip.dll"
HKCR,CLSID\{90ED8EEA-1605-4c46-8314-EED94AAA588B}\InprocServer32,ThreadingModel,,"Both"
; wpdmtp.dll
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90},,,"WindowsMtp Class"
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtp.dll"
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90}\InprocServer32,ThreadingModel,,"Both"
; wpdmtpdr.dll
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70},,,"WpdMtpDriver Class"
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtpdr.dll"
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70}\InprocServer32,ThreadingModel,,"Free"

[MTPBT.RegisterComServers]
; wpdmtpbt.dll
HKCR,CLSID\{87a0faf7-bb16-458d-b3eb-2423e79e1e0c},,,"MtpBluetoothTransport Class"
HKCR,CLSID\{87a0faf7-bb16-458d-b3eb-2423e79e1e0c}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtpbt.dll"
HKCR,CLSID\{87a0faf7-bb16-458d-b3eb-2423e79e1e0c}\InprocServer32,ThreadingModel,,"Both"
; wpdmtp.dll
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90},,,"WindowsMtp Class"
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtp.dll"
HKCR,CLSID\{F1AAAA76-BD01-42e1-A6C0-34FA86ACBB90}\InprocServer32,ThreadingModel,,"Both"
; wpdmtpdr.dll
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70},,,"WpdMtpDriver Class"
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70}\InprocServer32,,0x00020000,"%%SystemRoot%%\System32\wpdmtpdr.dll"
HKCR,CLSID\{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70}\InprocServer32,ThreadingModel,,"Free"

;=============== TS Redirection =============
[TSRedirection.Registration]
;
; Enable support for redirecting the device over Terminal Server connection.
;
HKR,,"TSRedirFlags",0x10001,0x1

; ================ AutoPlay =================

; PTP devices

[PTP.AutoPlayRegistration]
; This lists the interfaces which WinUsb.sys will register on device start; this list contains the legacy AutoPlay
HKR,,"Interfaces",0x00010000,"{6ac27878-a6fa-4155-ba85-f98f491d4f33}"

; Enable default AutoPlay support
HKR,,"EnableDefaultAutoPlaySupport",0x10001,1

; Ensure that the entries show up as 'source only' so apps registered for sink do not show up in the list
HKR,,"AutoPlaySourceOnly",0x10001,1

; MTP devices

[MTP.AutoPlayRegistration]
; Enable default AutoPlay support
HKR,,"EnableDefaultAutoPlaySupport",0x10001,1

; ================= WDF sections ===============

[WDF.CoInstaller]
HKR,,CoInstallers32,0x00010000,"WUDFCoinstaller.dll"

[WDF.Registration]
HKR,"WUDF","Exclusive",0x10001,1
HKR,,"LowerFilters",0x00010008,"WinUsb" ; FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND

; USB Selective Suspend default settings that WinUSB will check.  
HKR,,"DeviceIdleEnabled",       0x00010001,1       ; Enable USB SS (master switch);
HKR,,"DeviceIdleIgnoreWakeEnable", 0x00010001,1    ; Enable idle even thought device does not support device wake.
HKR,,"DefaultIdleState",        0x00010001,1       ; Default idle state for WinUSB is on;  
HKR,,"UserSetDeviceIdleEnabled",0x00010001,1       ; this setting will add a power management page to allow a user to enable/disable USB SS
HKR,,"DefaultIdleTimeout",      0x00010001,30000   ; idle detection timeout to 30 seconds
HKR,,"DevicePowerUpOnS0Entry",  0x00010001,1       ; Always enter D0 upon resume from sleep regardless of IdleInWorkingState of its power policy owner
HKR,"WDF","WdfDefaultIdleInWorkingState", 0x00010001,0       ; Current idle state for WDF driver (WinUSB) to off and uncheck the P.M. property page setting.


[WpdMtpDriver_Install]
UmdfLibraryVersion=1.11.0
ServiceBinary="%12%\umdf\WpdMtpDr.dll"
DriverCLSID="{AAAE762B-A6A2-4c45-B5D8-9A83AFB6BB70}"

; =============== Legacy support ===============

; PTP devices

[PTP.LEGACY.Registration]
; Request for auto-determination of WIA/WMDM legacy API support based on device capabilities and type
HKR,,"EnableLegacySupport",0x10001,0xFFFFFFFF

; Set PTP devices to 'Camera type' devices so the correct device icon will be displayed in File Explorer
HKR,,"PortableDeviceType",0x10001,1

; Report EXIF format as JPEG for WIA  
HKR,,"ReportJPGFormatForEXIF",0x10001,1

; MTP devices

[MTP.LEGACY.Registration]
; Request for auto-determination of WIA/WMDM legacy API support based on device capabilities and type
HKR,,"EnableLegacySupport",0x10001,0xFFFFFFFF

; Report EXIF format as JPEG for WIA  
HKR,,"ReportJPGFormatForEXIF",0x10001,1

; =================== WUDFWpdMtp ===================

[WUDFWpdMtp_ServiceInstall]
ServiceType     = %SERVICE_KERNEL_DRIVER%
StartType       = %SERVICE_DEMAND_START%
ErrorControl    = %SERVICE_ERROR_NORMAL%
ServiceBinary   = %12%\WUDFRd.sys
StartName       = \Driver\WudfRd

; =================== WinUsb ===================

[WinUsb_ServiceInstall]
DisplayName    = %WinUsb.SvcDesc%
ServiceType    = %SERVICE_KERNEL_DRIVER%
StartType      = %SERVICE_DEMAND_START%
ErrorControl   = %SERVICE_ERROR_NORMAL%
ServiceBinary  = %12%\WinUsb.sys

; =========== Driver update notification ========

[MTP.AddProp]
GenericDriverInstalled,,,,1

;
; =================== Strings ===================
;

[Strings]

;Non-localizable 
SERVICE_KERNEL_DRIVER = 0x1 
SERVICE_DEMAND_START  = 0x3 
SERVICE_ERROR_NORMAL  = 0x1 
Msft="Microsoft"

;Localizable
WinUsb.SvcDesc="WinUsb"
GenericMfg="(Standard MTP Device)"
GenericMTP.DeviceDesc="MTP USB Device"
GenericMTPIP.DeviceDesc="MTP IP Device"
GenericMTPBT.DeviceDesc="MTP Bluetooth Device"
