Skip to content

Commit dd364d6

Browse files
committed
HID: update device ID to prevent some ID collision
1 parent 4cdc3eb commit dd364d6

File tree

8 files changed

+110
-29
lines changed

8 files changed

+110
-29
lines changed

src/AmtPtpDeviceSpiKm/AppleDefinition.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#define SPI_TRACKPAD_MAX_FINGERS 10
4+
#define DEVICE_VID 0x8910
45

56
typedef struct _SPI_TRACKPAD_FINGER
67
{

src/AmtPtpDeviceSpiKm/Hid.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,9 @@ AmtPtpGetDeviceAttribs(
340340
}
341341

342342
pDeviceAttributes->Size = sizeof(HID_DEVICE_ATTRIBUTES);
343-
pDeviceAttributes->VendorID = pDeviceContext->HidVendorID;
343+
// Okay here's one thing: we cannot report the real ID here, otherwise there's will be some great conflict with the USB/BT driver.
344+
// Therefore Vendor ID is changed to a hardcoded number
345+
pDeviceAttributes->VendorID = DEVICE_VID;
344346
pDeviceAttributes->ProductID = pDeviceContext->HidProductID;
345347
pDeviceAttributes->VersionNumber = pDeviceContext->HidVersionNumber;
346348

src/AmtPtpDeviceUniversalPkg/AmtPtpDevice.inf

Lines changed: 69 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ PtpUmDrivers_Dir = 13
2222
AmtPtpDeviceUsbKm.sys = 1,,
2323
AmtPtpDeviceUsbUm.dll = 1,,
2424
AmtPtpDeviceSpiKm.sys = 1,,
25+
AmtPtpHidFilter.sys = 1,,
2526

2627
[Manufacturer]
2728
%ManufacturerName%=Standard,NT$ARCH$
2829

2930
[Standard.NT$ARCH$]
31+
; Apple T2
3032
%AmtPtpDeviceUsbKm.DeviceDesc%=AmtPtpDeviceUsbKm_Device, USB\Vid_05ac&Pid_0273&MI_02
3133
%AmtPtpDeviceUsbKm.DeviceDesc%=AmtPtpDeviceUsbKm_Device, USB\Vid_05ac&Pid_0274&MI_02
3234
%AmtPtpDeviceUsbKm.DeviceDesc%=AmtPtpDeviceUsbKm_Device, USB\Vid_05ac&Pid_0277&MI_02
@@ -41,6 +43,7 @@ AmtPtpDeviceSpiKm.sys = 1,,
4143
%AmtPtpDeviceUsbKm.DeviceDesc%=AmtPtpDeviceUsbKm_Device, USB\Vid_05ac&Pid_0291&MI_02
4244
%AmtPtpDeviceUsbKm.DeviceDesc%=AmtPtpDeviceUsbKm_Device, USB\Vid_05ac&Pid_0340&MI_02
4345

46+
; Traditional Mac trackpad
4447
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0236&MI_01
4548
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0237&MI_01
4649
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0238&MI_01
@@ -67,8 +70,8 @@ AmtPtpDeviceSpiKm.sys = 1,,
6770
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0274&MI_02
6871
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0290&MI_02
6972
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0291&MI_02
70-
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0265&MI_01
7173

74+
; SPI
7275
%AmtPtpDeviceSpiKm.DeviceDesc%=AmtPtpDeviceSpiKm_Device, SPI\VID_05ac&PID_0272&MI_02
7376
%AmtPtpDeviceSpiKm.DeviceDesc%=AmtPtpDeviceSpiKm_Device, SPI\VID_05ac&PID_0273&MI_02
7477
%AmtPtpDeviceSpiKm.DeviceDesc%=AmtPtpDeviceSpiKm_Device, SPI\VID_05ac&PID_0275&MI_02
@@ -80,14 +83,72 @@ AmtPtpDeviceSpiKm.sys = 1,,
8083
%AmtPtpDeviceSpiKm.DeviceDesc%=AmtPtpDeviceSpiKm_Device, SPI\VID_05ac&PID_0290&MI_02
8184
%AmtPtpDeviceSpiKm.DeviceDesc%=AmtPtpDeviceSpiKm_Device, SPI\VID_05ac&PID_0291&MI_02
8285

83-
; USB KM
86+
; Magic Trackpad 2 USB
87+
; Note: this will be a last few versions where Magic Trackpad 2 uses this old implementation
88+
%AmtPtpDeviceUsbUm.DeviceDesc%=AmtPtpDeviceUsbUm_Install, USB\Vid_05ac&Pid_0265&MI_01
89+
; Magic Trackpad 2 Bluetooth
90+
%AmtPtpHidFilter.DeviceDesc%=AmtPtpHidFilter_MiniPortDevice, HID\{00001124-0000-1000-8000-00805f9b34fb}_VID&0001004c_PID&0265&Col01
91+
%AmtPtpHidFilter.NullDeviceDesc%=AmtPtpHidFilter_NullDevice, HID\{00001124-0000-1000-8000-00805f9b34fb}_VID&0001004c_PID&0265&Col02
8492

85-
[AmtPtpDeviceUsbKm_Device.NT]
86-
CopyFiles=PtpKmDrivers_Dir
93+
; Null Device
94+
[AmtPtpHidFilter_NullDevice]
95+
; Nothing!
96+
97+
[AmtPtpHidFilter_NullDevice.Services]
98+
AddService = ,2 ; no value for the service name
99+
100+
; File paylods for each set of driver
101+
[FilterDriver_Payload]
102+
AmtPtpHidFilter.sys
87103

88104
[PtpKmDrivers_Dir]
89105
AmtPtpDeviceUsbKm.sys
90106

107+
[PtpUmDrivers_Dir]
108+
AmtPtpDeviceUsbUm.dll
109+
110+
[SpiKmDrivers_Dir]
111+
AmtPtpDeviceSpiKm.sys
112+
113+
; Microsoft HID KMDF driver install sections
114+
[mshidkmdf_Service_Inst]
115+
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
116+
StartType = 3 ; SERVICE_DEMAND_START
117+
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
118+
ServiceBinary = %10%\System32\Drivers\mshidkmdf.sys
119+
120+
; PTP filter
121+
[AmtPtpHidFilter_MiniPortDevice.NT]
122+
CopyFiles=FilterDriver_Payload
123+
124+
[AmtPtpHidFilter_MiniPortDevice.NT.Services]
125+
AddService = AmtPtpHidFilter,, AmtPtpHidFilter_Service_Inst
126+
AddService = mshidkmdf, %SPSVCINST_ASSOCSERVICE%, mshidkmdf_Service_Inst
127+
128+
[AmtPtpHidFilter_MiniPortDevice.NT.HW]
129+
AddReg=AmtPtpHidFilter_AddReg
130+
131+
[AmtPtpHidFilter_AddReg]
132+
HKR,,FriendlyName,,%AmtPtpHidFilter.DeviceDesc%
133+
HKR,,"LowerFilters",0x00010008,"AmtPtpHidFilter"
134+
135+
[AmtPtpHidFilter_MiniPortDevice.NT.Wdf]
136+
KmdfService = AmtPtpHidFilter, AmtPtpHidFilter_wdfsect
137+
138+
[AmtPtpHidFilter_Service_Inst]
139+
DisplayName = %AmtPtpHidFilter.SVCDESC%
140+
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
141+
StartType = 3 ; SERVICE_DEMAND_START
142+
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
143+
ServiceBinary = %13%\AmtPtpHidFilter.sys
144+
145+
[AmtPtpHidFilter_wdfsect]
146+
KmdfLibraryVersion = $KMDFVERSION$
147+
148+
; USB KM
149+
[AmtPtpDeviceUsbKm_Device.NT]
150+
CopyFiles=PtpKmDrivers_Dir
151+
91152
[AmtPtpDeviceUsbKm_Device.NT.Services]
92153
AddService = AmtPtpDeviceUsbKm,, AmtPtpDeviceUsbKm_Service_Inst
93154
AddService = mshidkmdf, %SPSVCINST_ASSOCSERVICE%, mshidkmdf_Service_Inst
@@ -99,13 +160,6 @@ AddReg=AmtPtpDeviceUsbKm_AddReg
99160
HKR,,FriendlyName,,%AmtPtpDeviceUsbKm.DeviceDesc%
100161
HKR,,"LowerFilters",0x00010008,"AmtPtpDeviceUsbKm"
101162

102-
; -------------- Microsoft HID KMDF driver install sections
103-
[mshidkmdf_Service_Inst]
104-
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
105-
StartType = 3 ; SERVICE_DEMAND_START
106-
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
107-
ServiceBinary = %10%\System32\Drivers\mshidkmdf.sys
108-
109163
; -------------- AmtPtpDeviceUsbKm driver install sections
110164
[AmtPtpDeviceUsbKm_Service_Inst]
111165
DisplayName = %AmtPtpDeviceUsbKm.SVCDESC%
@@ -131,9 +185,6 @@ AddReg=AmtPtpDeviceUsbUm_AddReg
131185
AddService=mshidumdf, 0x000001fa, MSHIDUMDF_ServiceInstall ; flag 0x2 sets this as the service for the device
132186
AddService=WUDFRd,0x000001f8,WUDFRD_ServiceInstall ; this service is installed because its a filter.
133187

134-
[AmtPtpDeviceUsbUm_Install.NT.CoInstallers]
135-
AddReg=UsbUmCoInstallers_AddReg
136-
137188
[AmtPtpDeviceUsbUm_Install.NT.Wdf]
138189
UmdfDispatcher=NativeUSB
139190
UmdfService=AmtPtpDeviceUsbUm,AmtPtpDeviceUsbUm_Install
@@ -165,19 +216,10 @@ StartType = 3
165216
ErrorControl = 1
166217
ServiceBinary = %12%\WUDFRd.sys
167218

168-
[PtpUmDrivers_Dir]
169-
AmtPtpDeviceUsbUm.dll
170-
171-
[UsbUmCoInstallers_AddReg]
172-
HKR,,CoInstallers32,0x00010000,"WUDFCoinstaller.dll"
173-
174219
; SPI KM
175220
[AmtPtpDeviceSpiKm_Device.NT]
176221
CopyFiles=SpiKmDrivers_Dir
177222

178-
[SpiKmDrivers_Dir]
179-
AmtPtpDeviceSpiKm.sys
180-
181223
[AmtPtpDeviceSpiKm_Device.NT.Services]
182224
AddService = AmtPtpDeviceSpiKm,, AmtPtpDeviceSpiKm_Service_Inst
183225
AddService = mshidkmdf, %SPSVCINST_ASSOCSERVICE%, mshidkmdf_Service_Inst ;flag 0x2 sets this as the service for the device
@@ -188,7 +230,6 @@ AddReg = AmtPtpDeviceSpiKm_Device.NT.AddReg
188230
[AmtPtpDeviceSpiKm_Device.NT.AddReg]
189231
HKR,,"LowerFilters",0x00010008,"AmtPtpDeviceSpiKm"
190232

191-
; -------------- AmtPtpDeviceSpiKm driver install sections
192233
[AmtPtpDeviceSpiKm_Service_Inst]
193234
DisplayName = %AmtPtpDeviceSpiKm.SVCDESC%
194235
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
@@ -215,3 +256,7 @@ AmtPtpDeviceSpiKm.DeviceDesc = "Apple SPI Precision Touchpad Device"
215256
AmtPtpDeviceSpiKm.SVCDESC = "Apple SPI Precision Touchpad Driver Service"
216257
AmtPtpDeviceUsbKm.SVCDESC = "Apple USB Precision Touchpad Service"
217258
WudfRdDisplayName = "Windows Driver Foundation - User-mode Driver Framework Reflector"
259+
AmtPtpHidRootDevice.DeviceDesc = "Apple Multi-touch Trackpad HID Device"
260+
AmtPtpHidFilter.DeviceDesc = "Apple Multi-touch Trackpad HID Filter"
261+
AmtPtpHidFilter.NullDeviceDesc = "Apple Multi-touch Auxiliary Services"
262+
AmtPtpHidFilter.SVCDESC = "Apple Multi-touch Trackpad HID Filter Service"

src/AmtPtpDeviceUniversalPkg/AmtPtpDeviceUniversalPkg.vcxproj

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@
4848
<ProjectReference Include="..\AmtPtpDeviceUsbUm\MagicTrackpad2PtpDevice.vcxproj">
4949
<Project>{87efa31b-25eb-4944-a30a-300171bfff57}</Project>
5050
</ProjectReference>
51+
<ProjectReference Include="..\AmtPtpHidFilter\AmtPtpHidFilter.vcxproj">
52+
<Project>{ee63c42b-f401-4f55-adbb-14c16bd3b18c}</Project>
53+
</ProjectReference>
5154
</ItemGroup>
5255
<ItemGroup>
5356
<Inf Include="AmtPtpDevice.inf" />
@@ -184,7 +187,7 @@
184187
<SignMode>TestSign</SignMode>
185188
</PropertyGroup>
186189
<!-- For release signed config on Azure pipeline, CI pipeline don't sign it. We do that locally -->
187-
<PropertyGroup Condition="'$(Configuration)'=='ReleaseSigned'">
190+
<PropertyGroup Condition="'$(Configuration)'=='ReleaseSigned'">
188191
<TimeStampServer>http://timestamp.digicert.com</TimeStampServer>
189192
<ProductionCertificate>$(ProductionCertPath)</ProductionCertificate>
190193
<SignMode Condition="'$(BuildEnvironment)'!='AzurePipeline'">ProductionSign</SignMode>
@@ -200,6 +203,30 @@
200203
<Inf>
201204
<TimeStamp Condition="'$(BuildEnvironment)'!='AzurePipeline'">*</TimeStamp>
202205
</Inf>
206+
<PreBuildEvent>
207+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
208+
</Command>
209+
</PreBuildEvent>
210+
<PreBuildEvent>
211+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
212+
</Command>
213+
</PreBuildEvent>
214+
<PreBuildEvent>
215+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
216+
</Command>
217+
</PreBuildEvent>
218+
<PreLinkEvent>
219+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
220+
</Command>
221+
</PreLinkEvent>
222+
<PreLinkEvent>
223+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
224+
</Command>
225+
</PreLinkEvent>
226+
<PreLinkEvent>
227+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
228+
</Command>
229+
</PreLinkEvent>
203230
</ItemDefinitionGroup>
204231
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseSigned|Win32'">
205232
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
@@ -295,4 +322,4 @@
295322
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
296323
<ImportGroup Label="ExtensionTargets">
297324
</ImportGroup>
298-
</Project>
325+
</Project>

src/AmtPtpDeviceUsbUm/Hid.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,9 @@ AmtPtpGetDeviceAttribs(
222222

223223
pDeviceAttributes->Size = sizeof(HID_DEVICE_ATTRIBUTES);
224224
pDeviceAttributes->ProductID = pContext->DeviceDescriptor.idProduct;
225-
pDeviceAttributes->VendorID = pContext->DeviceDescriptor.idVendor;
225+
// Okay here's one thing: we cannot report the real ID here, otherwise there's will be some great conflict with the USB/BT driver.
226+
// Therefore Vendor ID is changed to a hardcoded number
227+
pDeviceAttributes->VendorID = DEVICE_VID;
226228
pDeviceAttributes->VersionNumber = DEVICE_VERSION;
227229

228230
WdfRequestSetInformation(

src/AmtPtpDeviceUsbUm/include/Hid.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
typedef UCHAR HID_REPORT_DESCRIPTOR, *PHID_REPORT_DESCRIPTOR;
1818

1919
#define DEVICE_VERSION 0x01
20+
#define DEVICE_VID 0x8910
2021

2122
#define AAPL_PTP_USERMODE_CONFIGURATION_APP_TLC \
2223
USAGE_PAGE_1, 0x00, 0xff, /* Usage Page: Vendor defined */ \

src/AmtPtpHidFilter/Hid.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,10 @@ PtpFilterGetDeviceAttribs(
7676
}
7777

7878
pDeviceAttributes->Size = sizeof(HID_DEVICE_ATTRIBUTES);
79+
// Okay here's one thing: we cannot report the real ID here, otherwise there's will be some great conflict with the USB/BT driver.
80+
// Therefore Vendor ID is changed to a hardcoded number
7981
pDeviceAttributes->ProductID = deviceContext->ProductID;
80-
pDeviceAttributes->VendorID = deviceContext->VendorID;
82+
pDeviceAttributes->VendorID = DEVICE_VID;
8183
pDeviceAttributes->VersionNumber = DEVICE_VERSION;
8284
WdfRequestSetInformation(Request, sizeof(HID_DEVICE_ATTRIBUTES));
8385

src/AmtPtpHidFilter/include/HidCommon.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@
3939
#define BEGIN_COLLECTION 0xa1
4040
#define END_COLLECTION 0xc0
4141

42+
#define DEVICE_VID 0x8910
4243
#define DEVICE_VERSION 0x100

0 commit comments

Comments
 (0)