From f6a95c982936b353dc76e61ecd601746497e238a Mon Sep 17 00:00:00 2001 From: Kari Oikarinen Date: Thu, 22 Dec 2016 10:00:11 +0200 Subject: Add windows USB drivers The driver files were authored by Kimmo Ollila , 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 --- windows/usb_driver/README.txt | 67 +++++++++++++++++ windows/usb_driver/qdb_driver/qdb_device.inf | 93 ++++++++++++++++++++++++ windows/usb_driver/rndis_driver/rndis_device.inf | 55 ++++++++++++++ 3 files changed, 215 insertions(+) create mode 100644 windows/usb_driver/README.txt create mode 100644 windows/usb_driver/qdb_driver/qdb_device.inf create mode 100644 windows/usb_driver/rndis_driver/rndis_device.inf 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" -- cgit v1.2.3