; Copyright (c) Microsoft Corporation. All rights reserved.
;
; xinputhid.INF file
;

[Version]
Signature="$WINDOWS NT$"
Class=HIDClass
ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
Provider=%ProviderName%
PnpLockdown=1
DriverVer = 05/21/2024,10.0.22621.3672

; ================= Device section =====================

[Manufacturer]
%ProviderName%=Microsoft,NTamd64

[Microsoft.NTamd64]
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&02e0
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&02fd
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b02
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b05
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b0c
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b13

; Note: the below PIDs are not currently in use but have been pre-allocated by the PID team. For a variety
; of reasons we can not use a Compatability ID for the loading of this driver, and so rely on individual
; hardware IDs, however this creates complications when releasing new BlueTooth devices since we need to 
; service windows and rely on user taking the windows update before their devices will be functional.
;
; So, we are solveing this issue by preallocating a block of BTC and BTLE PIDs and checking in their 
; hardware IDs to the current development branch of windows so that over time, we will get support for
; these devices in more and more shipping versions, and depending on the release date of any given device
; no servicing updates may be needed to support all the desired windows version.
;
; When releasing a new device, there are a few steps that must be taken:
;
; 1) email mshpidad@microsoft.com with details about the device so that they can update internal documenattion
;    with the device details since currently it will be listed as "Xbox PID Block".
;
; 2) Add stings to this inf, and dc1-controller, in the current dev branch to cause future versions of
;    windows to have a device specific string rather than the current generic string, although this
;    usually will not need to be serviced back unless the string is crititcally important. It is also important
;    to move the VID pid from the pre-allocated blocks to the block above this comment to ensure it is known that
;    the PID is now in use by a device.
;
; 3) If either the number of BTLE or BTC PIDS in this pre-allocation list drops below 3, include a request for
;    more PIDs in tthe email to mshpidad@microsoft.com with the device details to ensure there is always a large
;    number of xbox pids seeded within versions of windows to allow for device development.
;
; Additionaly, Note that this list is only for BT PIDs, USB PIDs, or gip PIDs for wireless only devices,
; should be allocated from mshpidad@microsoft.com as new devices are created, and inf updates are not needed to 
; load the required drivers since we have a Compatability ID for USB devices, and the xbox wireless devices do
; not use a function driver, only the 2 wirless adapters do, and both of their hardware IDs have entries in WU
; to download and load the correct driver, since they are not currently inbox.

; BTLE pre-allocated PIDS
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b20
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b21
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b22
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b23
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b24
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b25
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b26
%Btle_Bus.DeviceDesc%=Btle_Bus, BTHLEDevice\{00001812-0000-1000-8000-00805f9b34fb}_Dev_VID&02045e_PID&0b27

; BTC pre-allocated PIDS
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b28
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b29
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b2A
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b2B
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b2C
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b2D
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b2E
%Bth_Bus.DeviceDesc%=Bth_Bus, BTHENUM\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002045e_PID&0b2F

; From xboxgip default appears with an GIP software PID
%VID_045E&PID_02D1.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_02D1&IG_00
%VID_045E&PID_02DD.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_02DD&IG_00
%VID_045E&PID_02E3.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_02E3&IG_00
%VID_045E&PID_02EA.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_02EA&IG_00
%VID_045E&PID_0B00.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_0B00&IG_00
%VID_045E&PID_0B0A.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_0B0A&IG_00
%VID_045E&PID_0B13.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_0B13&IG_00
%GIP_Hid.DeviceDesc%=GIP_Hid, HID\VID_045E&PID_02FF&IG_00
; Possibly scope to specific vendors, like HID\VID_045E&UP:0001_U:0005 for all MSFT HID game usage controllers
;%Managed_Hid.DeviceDesc%=Managed_Hid, HID_DEVICE_UP:0001_U:0005

;
; Format for each DDInstall subsection/section is
; All DDInstall common overrides
; Last XInputHid reference
; XInputhid specific values referenced from above reference
; Next required subsection/section
;

[Bth_Bus]
Include=hidbth.inf
Needs=HIDBTH_Inst.NT
CopyFiles=XInput_Hid.CopyFiles
AddReg=XInput_Hid.AddReg,Bth_Bus.AddReg

[Btle_Bus]
Include=hidbthle.inf
Needs=HidBthLE.NT
CopyFiles=XInput_Hid.CopyFiles
AddReg=XInput_Hid.AddReg,Btle_Bus.AddReg

[Btle_Bus.Wdf]
Include=hidbthle.inf
Needs=HidBthLE.NT.Wdf

;[Managed_Hid]
;CopyFiles=XInput_Hid.CopyFiles
;AddReg=XInput_Hid.AddReg,Managed_Hid.AddReg

[GIP_Hid]
CopyFiles=XInput_Hid.CopyFiles
AddReg=XInput_Hid.AddReg,GIP_Hid.AddReg

; Unused for reference
;[XInput_Hid]
;CopyFiles=XInput_Hid.CopyFiles
;AddReg=XInput_Hid.AddReg

[XInput_Hid.CopyFiles]
xinputhid.sys

;
; XInputHid property is a bitmask, from xinputhid.h
; Please keep in sync with xinputhid.h declaration
;//
;// Device properties to mark the type of device XInputHid is on top of
;// BusDevice means we're a focused bus filter driver for the IG_ problem
;// XInputCompatibleDevice means the device can be translated to XInput
;// GenericHidDevice means a device that is a HID device
;// GipRootedDevice means a device that is originated by GIP
;//
;typedef enum
;{
;    BusDevice = 0x1,
;    XInputCompatibleDevice = 0x2,
;    GenericHidDevice = 0x4,
;    GipRootedDevice = 0x8,
;    AndroidDevice = 0x10
;} XINPUTHID_DEVICEPROPERTY_FLAGS;
;
[Bth_Bus.AddReg]
HKR,,"DevicePropertyFlags", 0x00010001, 0x1

[Btle_Bus.AddReg]
HKR,,"DevicePropertyFlags", 0x00010001, 0x1

[XInput_Hid.AddReg]
HKR,,"DevicePropertyFlags", 0x00010001, 0xE
HKR,,"ConfigFlags", 0x00010001, 1

;[Managed_Hid.AddReg]
;HKR,,"DevicePropertyFlags", 0x00010001, 0x4

[GIP_Hid.AddReg]
HKR,,"DevicePropertyFlags", 0x00010001, 0xE

; copies of XInput_Hid for each DDInstall section
[Bth_Bus.HW]
Include=hidbth.inf
Needs=HIDBTH_Inst.NT.HW
AddReg=XInput_Hid.AddRegHW

[Btle_Bus.HW]
Include=hidbthle.inf
Needs=HidBthLE.NT.hw
AddReg=XInput_Hid.AddRegHW

;[Managed_Hid.HW]
;AddReg=XInput_Hid.AddRegHW
[GIP_Hid.HW]
AddReg=XInput_Hid.AddRegHW

;[XInput_Hid.HW]
;AddReg=XInput_Hid.AddRegHW

[XInput_Hid.AddRegHW]
HKR,,"UpperFilters",0x00010008,"xinputhid" ; REG_MULTI_SZ value

; copies of XInput_Hid for each DDInstall section
[Bth_Bus.Services]
Include=hidbth.inf
Needs=HIDBTH_Inst.NT.Services
AddService=xinputhid,,XInput_HidService ; filter driver

[Btle_Bus.Services]
Include=hidbthle.inf
Needs=HidBthLE.NT.Services
AddService=xinputhid,,XInput_HidService ; filter driver

;[Managed_Hid.Services]
;AddService=xinputhid,,XInput_HidService ; filter driver
[GIP_Hid.Services]
AddService=xinputhid,,XInput_HidService ; filter driver
AddService=,2 ; null function driver for raw PDO

;[XInput_Hid.Services]
;AddService=xinputhid,,XInput_HidService ; filter driver

[XInput_HidService]
DisplayName    = %xinputhid.SvcDesc%
ServiceType    = 1 ; SERVICE_KERNEL_DRIVER
StartType      = 3 ; SERVICE_DEMAND_START
ErrorControl   = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%\xinputhid.sys
AddReg         = XInput_Hid.AddReg
LoadOrderGroup = Base

;**********************************************************************
; Destination directories
;**********************************************************************
[DestinationDirs]
CopyFile.Sys    = 12
DefaultDestDir  = 12

[SourceDisksNames]
1=%Disk_Description%,,

[SourceDisksFiles]
xinputhid.sys = 1

;---------------------------------------------------------------;

[Strings]
ProviderName                     = "Microsoft"
Disk_Description                 = "XINPUT HID Filter Driver Installation Disk"
xinputhid.SvcDesc                = "XINPUT HID Filter Driver"
Bth_Bus.DeviceDesc               = "Bluetooth XINPUT compatible input device"
Btle_Bus.DeviceDesc              = "Bluetooth LE XINPUT compatible input device"
Gip_Hid.DeviceDesc               = "XINPUT compatible HID device"
VID_045E&PID_02D1.DeviceDesc     = "Xbox One Wireless Controller"
VID_045E&PID_02DD.DeviceDesc     = "Xbox One Wireless Controller"
VID_045E&PID_02E3.DeviceDesc     = "Xbox One Elite Wireless Controller"
VID_045E&PID_02EA.DeviceDesc     = "Xbox One Wireless Controller"
VID_045E&PID_0B00.DeviceDesc     = "Xbox One Wireless Controller"
VID_045E&PID_0B0A.DeviceDesc     = "Xbox Adaptive Controller"
VID_045E&PID_0B13.DeviceDesc     = "Xbox Wireless Controller"
Managed_Hid.DeviceDesc           = "Managed HID Gaming device"
