Added readme and diff file to patch libdwi to include the Maple USB devices

This commit is contained in:
Roger Clark 2015-01-23 21:10:05 +11:00
parent 359021bbcd
commit 287c431201
2 changed files with 320 additions and 0 deletions

View File

@ -0,0 +1,315 @@
diff -r -u -N libwdi-1.2.4 (original)/examples/wdi-simple.c libwdi-1.2.4 (modified)/examples/wdi-simple.c
--- libwdi-1.2.4 (original)/examples/wdi-simple.c 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/examples/wdi-simple.c 2015-01-19 11:22:49.026064300 +0100
@@ -57,7 +57,7 @@
printf("-p, --pid <id> set the product ID (PID, use 0x prefix for hex)\n");
printf("-i, --iid <id> set the interface ID (MI)\n");
printf("-t, --type <driver_type> set the driver to install\n");
- printf(" (0=WinUSB, 1=libusb-win32, 2=libusbK, 3=custom)\n");
+ printf(" (0=WinUSB, 1=libusb-win32, 2=libusbK, 3=usbser, 4=custom)\n");
printf("-w, --wcid use a WCID driver instead of a device-specific\n");
printf(" one (WinUSB, libusb-win32 or libusbK only)\n");
printf(" --filter use the libusb-win32 filter driver (requires -t1)\n");
@@ -223,7 +223,7 @@
if (wdi_create_list(&ldev, &ocl) == WDI_SUCCESS) {
r = WDI_SUCCESS;
for (; (ldev != NULL) && (r == WDI_SUCCESS); ldev = ldev->next) {
- if ( (ldev->vid == dev.vid) && (ldev->pid == dev.pid) && (ldev->mi == dev.mi) ) {
+ if ( (ldev->vid == dev.vid) && (ldev->pid == dev.pid) && (ldev->mi == dev.mi) && (ldev->is_composite == dev.is_composite)) {
dev.hardware_id = ldev->hardware_id;
dev.device_id = ldev->device_id;
matching_device_found = TRUE;
diff -r -u -N libwdi-1.2.4 (original)/examples/zadig.c libwdi-1.2.4 (modified)/examples/zadig.c
--- libwdi-1.2.4 (original)/examples/zadig.c 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/examples/zadig.c 2015-01-18 14:52:42.578606600 +0100
@@ -80,8 +80,8 @@
WORD application_version[4];
char app_dir[MAX_PATH], driver_text[64];
char extraction_path[MAX_PATH];
-const char* driver_display_name[WDI_NB_DRIVERS] = { "WinUSB", "libusb-win32", "libusbK", "Custom (extract only)" };
-const char* driver_name[WDI_NB_DRIVERS-1] = { "WinUSB", "libusb0", "libusbK" };
+const char* driver_display_name[WDI_NB_DRIVERS] = { "WinUSB", "libusb-win32", "libusbK", "USB Serial", "Custom (extract only)" };
+const char* driver_name[WDI_NB_DRIVERS-1] = { "WinUSB", "libusb0", "libusbK", "usbser" };
struct wdi_options_create_list cl_options = { 0 };
struct wdi_options_prepare_driver pd_options = { 0 };
struct wdi_options_install_cert ic_options = { 0 };
diff -r -u -N libwdi-1.2.4 (original)/libwdi/.msvc/libwdi_static.vcxproj libwdi-1.2.4 (modified)/libwdi/.msvc/libwdi_static.vcxproj
--- libwdi-1.2.4 (original)/libwdi/.msvc/libwdi_static.vcxproj 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/.msvc/libwdi_static.vcxproj 2015-01-18 14:40:04.634370100 +0100
@@ -186,6 +186,8 @@
<None Include="..\libusb0.cat.in" />
<None Include="..\libusb0.inf.in" />
<None Include="..\libusbk.cat.in" />
+ <None Include="..\usbser.cat.in" />
+ <None Include="..\usbser.inf.in" />
<None Include="..\winusb.cat.in" />
<None Include="..\winusb.inf.in" />
<None Include="..\libusbk.inf.in" />
diff -r -u -N libwdi-1.2.4 (original)/libwdi/.msvc/libwdi_static.vcxproj.filters libwdi-1.2.4 (modified)/libwdi/.msvc/libwdi_static.vcxproj.filters
--- libwdi-1.2.4 (original)/libwdi/.msvc/libwdi_static.vcxproj.filters 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/.msvc/libwdi_static.vcxproj.filters 2015-01-18 14:40:04.618745100 +0100
@@ -81,5 +81,11 @@
<None Include="..\libusbk.cat.in">
<Filter>Resource Files</Filter>
</None>
+ <None Include="..\usbser.cat.in">
+ <Filter>Resource Files</Filter>
+ </None>
+ <None Include="..\usbser.inf.in">
+ <Filter>Resource Files</Filter>
+ </None>
</ItemGroup>
</Project>
\ No newline at end of file
diff -r -u -N libwdi-1.2.4 (original)/libwdi/embedder.c libwdi-1.2.4 (modified)/libwdi/embedder.c
--- libwdi-1.2.4 (original)/libwdi/embedder.c 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/embedder.c 2015-01-18 14:22:00.536945400 +0100
@@ -295,7 +295,7 @@
}
// Copy the fixed part of our table into our new array
for (i=0; i<nb_embeddables_fixed; i++) {
- embeddable[i].reuse_last = 0;
+ embeddable[i].reuse_last = embeddable_fixed[i].reuse_last;
embeddable[i].file_name = embeddable_fixed[i].file_name;
embeddable[i].extraction_subdir = embeddable_fixed[i].extraction_subdir;
}
diff -r -u -N libwdi-1.2.4 (original)/libwdi/embedder_files.h libwdi-1.2.4 (modified)/libwdi/embedder_files.h
--- libwdi-1.2.4 (original)/libwdi/embedder_files.h 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/embedder_files.h 2015-01-18 15:02:29.980055000 +0100
@@ -90,7 +90,7 @@
# if defined(OPT_M32)
# if !defined(DDK_DIR)
- { 0, LIBUSBK_DIR "\\sys\\x86\\WdfCoInstaller" STR(WDF_VER) ".dll", "x86" },
+ { 0, LIBUSBK_DIR "\\sys\\x86\\WdfCoInstaller0" STR(WDF_VER) ".dll", "x86" },
# endif // DDK_DIR
{ 0, LIBUSBK_DIR "\\sys\\x86\\libusbK.sys", "x86" },
{ 0, LIBUSBK_DIR "\\dll\\x86\\libusbK.dll", "x86" },
@@ -107,7 +107,7 @@
# if defined(OPT_M64)
# if !defined(DDK_DIR)
- { 0, LIBUSBK_DIR "\\sys\\amd64\\WdfCoInstaller" STR(WDF_VER) ".dll", "amd64" },
+ { 0, LIBUSBK_DIR "\\sys\\amd64\\WdfCoInstaller0" STR(WDF_VER) ".dll", "amd64" },
# endif // DDK_DIR
{ 0, LIBUSBK_DIR "\\sys\\amd64\\libusbK.sys", "amd64" },
{ 0, LIBUSBK_DIR "\\dll\\amd64\\libusbK.dll", "amd64" },
@@ -127,7 +127,7 @@
# if defined(OPT_IA64)
# if !defined(DDK_DIR)
- { 0, LIBUSBK_DIR "\\sys\\ia64\\WdfCoInstaller" STR(WDF_VER) ".dll", "ia64" },
+ { 0, LIBUSBK_DIR "\\sys\\ia64\\WdfCoInstaller0" STR(WDF_VER) ".dll", "ia64" },
# endif // DDK_DIR
{ 0, LIBUSBK_DIR "\\sys\\ia64\\libusbK.sys", "ia64" },
{ 0, LIBUSBK_DIR "\\dll\\ia64\\libusbK.dll", "ia64" },
@@ -147,8 +147,10 @@
{ 0, "winusb.inf.in", "" },
{ 0, "libusb0.inf.in", "" },
{ 0, "libusbk.inf.in", "" },
+ { 0, "usbser.inf.in", "" },
// cat file lists for self signing
{ 0, "winusb.cat.in", "" },
{ 0, "libusb0.cat.in", "" },
{ 0, "libusbk.cat.in", "" },
+ { 0, "usbser.cat.in", "" },
};
diff -r -u -N libwdi-1.2.4 (original)/libwdi/libwdi.c libwdi-1.2.4 (modified)/libwdi/libwdi.c
--- libwdi-1.2.4 (original)/libwdi/libwdi.c 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/libwdi.c 2015-01-19 11:47:51.098272300 +0100
@@ -54,11 +54,11 @@
static BOOL filter_driver = FALSE;
static DWORD timeout = DEFAULT_TIMEOUT;
static HANDLE pipe_handle = INVALID_HANDLE_VALUE;
-static VS_FIXEDFILEINFO driver_version[WDI_NB_DRIVERS-1] = { {0}, {0}, {0} };
-static const char* driver_name[WDI_NB_DRIVERS-1] = {"winusbcoinstaller2.dll", "libusb0.sys", "libusbK.sys"};
-static const char* inf_template[WDI_NB_DRIVERS-1] = {"winusb.inf.in", "libusb0.inf.in", "libusbk.inf.in"};
-static const char* cat_template[WDI_NB_DRIVERS-1] = {"winusb.cat.in", "libusb0.cat.in", "libusbk.cat.in"};
-static const char* ms_compat_id[WDI_NB_DRIVERS-1] = {"MS_COMP_WINUSB", "MS_COMP_LIBUSB0", "MS_COMP_LIBUSBK"};
+static VS_FIXEDFILEINFO driver_version[WDI_NB_DRIVERS-1] = { {0}, {0}, {0}, {0} };
+static const char* driver_name[WDI_NB_DRIVERS-1] = {"winusbcoinstaller2.dll", "libusb0.sys", "libusbK.sys", "usbser.sys"};
+static const char* inf_template[WDI_NB_DRIVERS-1] = {"winusb.inf.in", "libusb0.inf.in", "libusbk.inf.in", "usbser.inf.in"};
+static const char* cat_template[WDI_NB_DRIVERS-1] = {"winusb.cat.in", "libusb0.cat.in", "libusbk.cat.in", "usbser.cat.in"};
+static const char* ms_compat_id[WDI_NB_DRIVERS-1] = {"MS_COMP_WINUSB", "MS_COMP_LIBUSB0", "MS_COMP_LIBUSBK", "MS_COMP_USBSER"};
// for 64 bit platforms detection
static BOOL (__stdcall *pIsWow64Process)(HANDLE, PBOOL) = NULL;
static int windows_version = WINDOWS_UNDEFINED;
@@ -397,6 +397,32 @@
return WDI_ERROR_RESOURCE;
}
+ if (driver_type == WDI_USBSER) {
+ SYSTEMTIME LocalTime;
+ FILETIME FileTime;
+ file_info = &driver_version[driver_type];
+ ZeroMemory(file_info, sizeof(VS_FIXEDFILEINFO));
+ file_info->dwSignature = 0xFEEF04BD;
+ file_info->dwStrucVersion = 0x10000; // not used
+ file_info->dwFileVersionMS = (1 << 16) | (0 << 0);
+ file_info->dwFileVersionLS = (0 << 16) | (0 << 0);
+ file_info->dwProductVersionMS = 0x60003; // not used
+ file_info->dwProductVersionLS = 0x25804000; // not used
+ file_info->dwFileFlagsMask = 0x3F; // not used
+ file_info->dwFileFlags = 0; // not used
+ file_info->dwFileOS = 0x40004; // not used
+ file_info->dwFileType = 2; // not used
+ file_info->dwFileSubtype = 0; // not used
+ GetLocalTime(&LocalTime);
+ if (SystemTimeToFileTime(&LocalTime, &FileTime))
+ {
+ file_info->dwFileDateMS = FileTime.dwHighDateTime;
+ file_info->dwFileDateLS = FileTime.dwLowDateTime;
+ }
+ memcpy(driver_info, file_info, sizeof(VS_FIXEDFILEINFO));
+ return WDI_SUCCESS;
+ }
+
for (res=0; res<nb_resources; res++) {
// Identify the WinUSB and libusb0 files we'll pick the date & version of
if (safe_strcmp(resource[res].name, driver_name[driver_type]) == 0) {
@@ -489,6 +515,12 @@
#else
return FALSE;
#endif
+ case WDI_USBSER:
+#if defined(USBSER_DIR)
+ return TRUE;
+#else
+ return FALSE;
+#endif
case WDI_USER:
#if defined(USER_DIR)
return TRUE;
@@ -978,7 +1010,7 @@
{
const wchar_t bom = 0xFEFF;
#if defined(ENABLE_DEBUG_LOGGING) || defined(INCLUDE_DEBUG_LOGGING)
- const char* driver_display_name[WDI_NB_DRIVERS] = { "WinUSB", "libusb0.sys", "libusbK.sys", "user driver" };
+ const char* driver_display_name[WDI_NB_DRIVERS] = { "WinUSB", "libusb0.sys", "libusbK.sys", "usbser.sys", "user driver" };
#endif
const char* inf_ext = ".inf";
const char* vendor_name = NULL;
diff -r -u -N libwdi-1.2.4 (original)/libwdi/libwdi.h libwdi-1.2.4 (modified)/libwdi/libwdi.h
--- libwdi-1.2.4 (original)/libwdi/libwdi.h 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/libwdi.h 2015-01-18 14:40:04.603120300 +0100
@@ -49,6 +49,7 @@
WDI_WINUSB,
WDI_LIBUSB0,
WDI_LIBUSBK,
+ WDI_USBSER,
WDI_USER,
WDI_NB_DRIVERS // Total number of drivers in the enum
};
diff -r -u -N libwdi-1.2.4 (original)/libwdi/usbser.cat.in libwdi-1.2.4 (modified)/libwdi/usbser.cat.in
--- libwdi-1.2.4 (original)/libwdi/usbser.cat.in 1970-01-01 01:00:00.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/usbser.cat.in 2015-01-18 17:51:34.298706900 +0100
@@ -0,0 +1,2 @@
+# List of the binaries referenced by the USBSER inf
+# These are used to generate and self-sign a .cat file
diff -r -u -N libwdi-1.2.4 (original)/libwdi/usbser.inf.in libwdi-1.2.4 (modified)/libwdi/usbser.inf.in
--- libwdi-1.2.4 (original)/libwdi/usbser.inf.in 1970-01-01 01:00:00.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/usbser.inf.in 2015-01-18 15:41:06.984656000 +0100
@@ -0,0 +1,54 @@
+; #INF_FILENAME#
+
+[Strings]
+DeviceName = "#DEVICE_DESCRIPTION#"
+VendorName = "#DEVICE_MANUFACTURER#"
+SourceName = "#DEVICE_DESCRIPTION# Install Disk"
+DeviceID = "#DEVICE_HARDWARE_ID#"
+DeviceGUID = "#DEVICE_INTERFACE_GUID#"
+
+[Version]
+Signature = "$Windows NT$"
+Class = Ports
+ClassGuid = {4D36E978-E325-11CE-BFC1-08002BE10318}
+Provider = %VendorName%
+CatalogFile = #CAT_FILENAME#
+DriverVer = #DRIVER_DATE#, #DRIVER_VERSION#
+
+[Manufacturer]
+%VendorName%=DeviceList, NTamd64, NTia64
+
+[DestinationDirs]
+FakeModemCopyFileSection=12
+DefaultDestDir=12
+
+[DeviceList]
+%DeviceName% = DriverInstall, USB\%DeviceID%
+
+[DeviceList.NTamd64]
+%DeviceName% = DriverInstall, USB\%DeviceID%
+
+[DeviceList.NTia64]
+%DeviceName% = DriverInstall, USB\%DeviceID%
+
+[DriverInstall]
+include=mdmcpq.inf,usb.inf
+CopyFiles = FakeModemCopyFileSection
+AddReg=DriverAddReg
+
+[DriverAddReg]
+HKR,,DevLoader,,*ntkern
+HKR,,NTMPDriver,,usbser.sys
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
+
+[DriverInstall.Services]
+include=mdmcpq.inf
+AddService=usbser, 0x00000002, DriverService
+
+[DriverService]
+DisplayName=%ServiceName%
+ServiceType=1
+StartType=3
+ErrorControl=1
+ServiceBinary=%12%\usbser.sys
+LoadOrderGroup=Base
diff -r -u -N libwdi-1.2.4 (original)/libwdi/vid_data.c libwdi-1.2.4 (modified)/libwdi/vid_data.c
--- libwdi-1.2.4 (original)/libwdi/vid_data.c 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/libwdi/vid_data.c 2015-01-18 17:24:32.080058800 +0100
@@ -2914,6 +2914,7 @@
{ 0xeb2a, "KWorld" },
{ 0xf003, "Hewlett Packard" },
{ 0xf4ec, "Atten Electronics / Siglent Technologies" },
+ { 0x1eaf, "LeafLabs, LLC" },
};
const char* LIBWDI_API wdi_get_vendor_name(unsigned short vid)
diff -r -u -N libwdi-1.2.4 (original)/msvc/config.h libwdi-1.2.4 (modified)/msvc/config.h
--- libwdi-1.2.4 (original)/msvc/config.h 2014-12-01 00:01:08.000000000 +0100
+++ libwdi-1.2.4 (modified)/msvc/config.h 2015-01-18 15:32:43.809858300 +0100
@@ -21,7 +21,7 @@
* match your WinUSB redist directrories
*/
#ifndef DDK_DIR
-#define DDK_DIR "C:/Program Files (x86)/Windows Kits/8.1"
+ #define DDK_DIR "C:/temp/libwdi/ddk"
#endif
/* DDK WDF coinstaller version */
@@ -35,17 +35,22 @@
/* embed libusb0 driver files from the following location */
#ifndef LIBUSB0_DIR
-#define LIBUSB0_DIR "D:/libusb-win32"
+ #define LIBUSB0_DIR "C:/temp/libwdi/libusb0"
#endif
/* embed libusbK driver files from the following location */
#ifndef LIBUSBK_DIR
-#define LIBUSBK_DIR "D:/libusbK/bin"
+ #define LIBUSBK_DIR "C:/temp/libwdi/libusbk"
+#endif
+
+/* embed usbser driver files from the following location */
+#ifndef USBSER_DIR
+ #define USBSER_DIR "C:/temp/libwdi/usbser"
#endif
/* embed user defined driver files from the following location */
#ifndef USER_DIR
-// #define USER_DIR "C:/signed-driver"
+// #define USER_DIR "C:/temp/libwdi/user"
#endif
/* 32 bit support */

View File

@ -0,0 +1,5 @@
It doesn't seem to be possible to have a patched version of a submodule within a repo.
So to rebuild libdwi and include the USB VID/PID's for the Maple USB devices, apply the diff file as a patch to the sources in the pbatard_libwdi folder