summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKari Oikarinen <kari.oikarinen@qt.io>2016-12-22 10:00:11 +0200
committerKari Oikarinen <kari.oikarinen@qt.io>2017-01-16 07:28:10 +0000
commitf6a95c982936b353dc76e61ecd601746497e238a (patch)
tree3854d22256b8e7034b36facddd7d9fc3eddcd592
parentc3f54cedb1fc2805eb21b2499514284941445e85 (diff)
Add windows USB drivers
The driver files were authored by Kimmo Ollila <kimmo.ollila@qt.io>, but I did the changes to vendor and product IDs and wrote instructions about test-signing into README.txt. The catalog (.cat) files are not included, since they are derived from .infs and the signing process changes them anyway. Change-Id: Ic88ecad6cd037c65392af2de372b347e02d5a59c Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
-rw-r--r--windows/usb_driver/README.txt67
-rw-r--r--windows/usb_driver/qdb_driver/qdb_device.inf93
-rw-r--r--windows/usb_driver/rndis_driver/rndis_device.inf55
3 files changed, 215 insertions, 0 deletions
diff --git a/windows/usb_driver/README.txt b/windows/usb_driver/README.txt
new file mode 100644
index 0000000..99f514d
--- /dev/null
+++ b/windows/usb_driver/README.txt
@@ -0,0 +1,67 @@
+To have a complete driver package, in addition to the .infs under this
+directory the following steps are required:
+
+- add WinUSB co-installer DLLs from Windows Driver Kit for each architecture for qdb_device.inf
+- generate catalog files for the .infs
+- sign the catalog files
+
+-----------------------------------------------------------------------------
+
+Add coinstallers from Windows Driver Kit as instructed in
+https://msdn.microsoft.com/en-us/library/windows/hardware/ff540283(v=vs.85).aspx#howto
+
+Example commands:
+
+mkdir qdb_driver\x86
+copy "C:\Program Files (x86)\Windows Kits\10\Redist\wdf\x86\winusbcoinstaller2.dll" qdb_driver\x86
+copy "C:\Program Files (x86)\Windows Kits\10\Redist\wdf\x86\WdfCoInstaller01009.dll" qdb_driver\x86
+mkdir qdb_driver\amd64
+copy "C:\Program Files (x86)\Windows Kits\10\Redist\wdf\x64\winusbcoinstaller2.dll" qdb_driver\amd64
+copy "C:\Program Files (x86)\Windows Kits\10\Redist\wdf\x64\WdfCoInstaller01009.dll" qdb_driver\amd64
+
+Driver signing for Windows is documented at
+https://msdn.microsoft.com/en-us/windows/hardware/drivers/install/driver-signing
+but here's an abbreviated version:
+
+The .cat files are catalog files, that are derived from the .infs (and the
+files they reference). They are created with inf2cat from Windows Driver Kit.
+
+Example commands for creating the catalog files:
+
+"C:\Program Files (x86)\Windows Kits\10\bin\x86\inf2cat.exe" /driver:"C:\Users\kaoikari1\work\qdb\windows\usb_driver\qdb_driver" /os:8_X64,8_X86,Server8_X64,Server2008R2_X64,7_X64,7_X86,Server2008_X64,Server2008_X86,10_X86,10_X64,Server10_X64
+"C:\Program Files (x86)\Windows Kits\10\bin\x86\inf2cat.exe" /driver:"C:\Users\kaoikari1\work\qdb\windows\usb_driver\rndis_driver" /os:8_X64,8_X86,Server8_X64,Server2008R2_X64,7_X64,7_X86,Server2008_X64,Server2008_X86,10_X86,10_X64,Server10_X64
+
+Catalog files need to be signed in order for drivers to be installable.
+It is done with signtool, which is included in Windows SDK. See the end of
+this README for how to create a test certificate.
+
+Example commands to sign with a test key "Qt.io(Test)" in PrivateCertStore:
+
+"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /v /s PrivateCertStore /n Qt.io(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll qdb_driver\qdb_device.cat
+"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /v /s PrivateCertStore /n Qt.io(Test) /t http://timestamp.verisign.com/scripts/timstamp.dll rndis_driver\rndis_device.cat
+
+Signtool can also be used to verify that driver is correctly signed:
+
+"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" verify /pa /v /c qdb_driver\qdb_device.cat qdb_driver\qdb_device.inf
+"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" verify /pa /v /c rndis_driver\rndis_device.cat rndis_driver\rndis_device.inf
+
+The drivers can be installed with pnputil:
+
+pnputil -a qdb_driver\qdb_device.inf
+pnputil -a rndis_driver\rndis_device.inf
+
+-----------------------------------------------------------------------------
+
+Creating a test certificate:
+
+makecert -r -pe -ss PrivateCertStore -n CN=Qt.io(Test) QtIoTest.cer
+
+Test-signed drivers can only be installed, if the computer is in test mode,
+which can be enabled with:
+
+bcdedit.exe -set testsigning on
+
+The test certificate also needs to be added to trusted root certification
+authorities:
+
+certmgr.exe /add QtIoTest.cer /s /r localMachine root
diff --git a/windows/usb_driver/qdb_driver/qdb_device.inf b/windows/usb_driver/qdb_driver/qdb_device.inf
new file mode 100644
index 0000000..13b2bcd
--- /dev/null
+++ b/windows/usb_driver/qdb_driver/qdb_device.inf
@@ -0,0 +1,93 @@
+; QDB WinUsb driver installation
+
+[Strings]
+DeviceName = "QDB interface"
+VendorID = "VID_DBDB"
+ProductID = "PID_0001"
+InterfaceID = "MI_02"
+DeviceGUID = "{f481a26c-0a24-57bd-8a81-36d879e74f44}"
+
+DeviceClassGUID = "{78a1c341-4539-11d3-b88d-00c04fad5171}"
+Date = "01/08/2010"
+
+ProviderName = "libusb 1.0"
+WinUSB_SvcDesc = "WinUSB Driver Service"
+DiskName = "libusb (WinUSB) Device Install Disk"
+ClassName = "QDB Device"
+
+[Version]
+DriverVer = %Date%
+Signature = "$Windows NT$"
+Class = %ClassName%
+ClassGuid = %DeviceClassGUID%
+Provider = %ProviderName%
+CatalogFile = qdb_device.cat
+
+[ClassInstall32]
+Addreg = WinUSBDeviceClassReg
+
+[WinUSBDeviceClassReg]
+HKR,,,0,%ClassName%
+HKR,,Icon,,-20
+
+[Manufacturer]
+%ProviderName% = libusbDevice_WinUSB,NTx86,NTamd64
+
+[libusbDevice_WinUSB.NTx86]
+%DeviceName% = USB_Install, USB\%VendorID%&%ProductID%&%InterfaceID%
+
+[libusbDevice_WinUSB.NTamd64]
+%DeviceName% = USB_Install, USB\%VendorID%&%ProductID%&%InterfaceID%
+
+[USB_Install]
+Include=winusb.inf
+Needs=WINUSB.NT
+
+[USB_Install.Services]
+Include=winusb.inf
+AddService=WinUSB,0x00000002,WinUSB_ServiceInstall
+
+[WinUSB_ServiceInstall]
+DisplayName = %WinUSB_SvcDesc%
+ServiceType = 1
+StartType = 3
+ErrorControl = 1
+ServiceBinary = %12%\WinUSB.sys
+
+[USB_Install.Wdf]
+KmdfService=WINUSB, WinUsb_Install
+
+[WinUSB_Install]
+KmdfLibraryVersion=1.9
+
+[USB_Install.HW]
+AddReg=Dev_AddReg
+
+[Dev_AddReg]
+HKR,,DeviceInterfaceGUIDs,0x10000,%DeviceGUID%
+
+[USB_Install.CoInstallers]
+AddReg=CoInstallers_AddReg
+CopyFiles=CoInstallers_CopyFiles
+
+[CoInstallers_AddReg]
+HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"
+
+[CoInstallers_CopyFiles]
+WinUSBCoInstaller2.dll
+WdfCoInstaller01009.dll
+
+[DestinationDirs]
+CoInstallers_CopyFiles=11
+
+[SourceDisksNames]
+1 = %DiskName%,,,\x86
+2 = %DiskName%,,,\amd64
+
+[SourceDisksFiles.x86]
+WinUSBCoInstaller2.dll=1
+WdfCoInstaller01009.dll=1
+
+[SourceDisksFiles.amd64]
+WinUSBCoInstaller2.dll=2
+WdfCoInstaller01009.dll=2
diff --git a/windows/usb_driver/rndis_driver/rndis_device.inf b/windows/usb_driver/rndis_driver/rndis_device.inf
new file mode 100644
index 0000000..e1b2ec7
--- /dev/null
+++ b/windows/usb_driver/rndis_driver/rndis_device.inf
@@ -0,0 +1,55 @@
+; Remote NDIS device installation
+
+[Version]
+Signature = "$Windows NT$"
+Class = Net
+ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
+Provider = %Microsoft%
+DriverVer = 07/21/2008,6.0.6000.16384
+CatalogFile = rndis_device.cat
+
+[Manufacturer]
+%Microsoft% = RndisDevices,NTx86,NTamd64,NTia64
+
+[RndisDevices.NTx86]
+%RndisDevice% = RNDIS.NT.6.0, USB\%VendorID%&%ProductID%&%InterfaceID%
+
+[RndisDevices.NTamd64]
+%RndisDevice% = RNDIS.NT.6.0, USB\%VendorID%&%ProductID%&%InterfaceID%
+
+[RndisDevices.NTia64]
+%RndisDevice% = RNDIS.NT.6.0, USB\%VendorID%&%ProductID%&%InterfaceID%
+
+[ControlFlags]
+ExcludeFromSelect=*
+
+[RNDIS.NT.6.0]
+Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
+BusType = 15
+include = netrndis.inf
+needs = usbrndis6.ndi
+AddReg = Rndis_AddReg
+*IfType = 6 ; IF_TYPE_ETHERNET_CSMACD.
+*MediaType = 16 ; NdisMediumNative802_11
+*PhysicalMediaType = 14 ; NdisPhysicalMedium802_3
+
+[RNDIS.NT.6.0.Services]
+include = netrndis.inf
+needs = usbrndis6.ndi.Services
+
+[RNDIS_AddReg]
+HKR, NDI\params\RndisProperty, ParamDesc, 0, %Rndis_Property%
+HKR, NDI\params\RndisProperty, type, 0, "edit"
+HKR, NDI\params\RndisProperty, LimitText, 0, "12"
+HKR, NDI\params\RndisProperty, UpperCase, 0, "1"
+HKR, NDI\params\RndisProperty, default, 0, " "
+HKR, NDI\params\RndisProperty, optional, 0, "1"
+
+[Strings]
+Microsoft = "Microsoft Corporation"
+RndisDevice = "Remote NDIS6 based Device"
+Rndis_Property = "Optional RNDIS Property"
+
+VendorID = "VID_DBDB"
+ProductID = "PID_0001"
+InterfaceID = "MI_00"