[PATCH 1/6] winebus.sys: Report WINEBUS\WINE_COMP_HID compatible id.

Rémi Bernon rbernon at codeweavers.com
Thu Aug 26 00:58:59 CDT 2021


And match it in winehid.sys instead of individual bus ids.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/winebus.sys/main.c      | 26 ++++++++++++++++++++++++--
 dlls/winehid.sys/winehid.inf |  7 +------
 2 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
index 41aef8ab018..c09ea1c2828 100644
--- a/dlls/winebus.sys/main.c
+++ b/dlls/winebus.sys/main.c
@@ -226,7 +226,7 @@ static WCHAR *get_device_id(DEVICE_OBJECT *device)
     return dst;
 }
 
-static WCHAR *get_compatible_ids(DEVICE_OBJECT *device)
+static WCHAR *get_hardware_ids(DEVICE_OBJECT *device)
 {
     struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
     WCHAR *dst;
@@ -240,6 +240,28 @@ static WCHAR *get_compatible_ids(DEVICE_OBJECT *device)
     return dst;
 }
 
+static WCHAR *get_compatible_ids(DEVICE_OBJECT *device)
+{
+    static const WCHAR hid_compat[] =
+    {
+        'W','I','N','E','B','U','S','\\','W','I','N','E','_','C','O','M','P','_','H','I','D',0
+    };
+    DWORD pos = 0, len = 0, hid_compat_len;
+    WCHAR *dst;
+
+    hid_compat_len = strlenW(hid_compat);
+
+    len += hid_compat_len + 1;
+
+    if ((dst = ExAllocatePool(PagedPool, (len + 1) * sizeof(WCHAR))))
+    {
+        pos += snprintfW(dst + pos, len - pos, hid_compat) + 1;
+        dst[pos] = 0;
+    }
+
+    return dst;
+}
+
 static void remove_pending_irps(DEVICE_OBJECT *device)
 {
     struct device_extension *ext = device->DeviceExtension;
@@ -444,7 +466,7 @@ static NTSTATUS handle_IRP_MN_QUERY_ID(DEVICE_OBJECT *device, IRP *irp)
     {
         case BusQueryHardwareIDs:
             TRACE("BusQueryHardwareIDs\n");
-            irp->IoStatus.Information = (ULONG_PTR)get_compatible_ids(device);
+            irp->IoStatus.Information = (ULONG_PTR)get_hardware_ids(device);
             break;
         case BusQueryCompatibleIDs:
             TRACE("BusQueryCompatibleIDs\n");
diff --git a/dlls/winehid.sys/winehid.inf b/dlls/winehid.sys/winehid.inf
index f9ed4091217..c1d8a1cf999 100644
--- a/dlls/winehid.sys/winehid.inf
+++ b/dlls/winehid.sys/winehid.inf
@@ -7,12 +7,7 @@ Class=HIDClass
 Wine=mfg_section
 
 [mfg_section]
-Wine hidraw device=device_section,HIDRAW
-Wine IOHID device=device_section,IOHID
-Wine libevent device=device_section,LNXEV
-Wine SDL HID device=device_section,SDLJOY
-Wine mouse device=device_section,WINEMOUSE
-Wine keyboard device=device_section,WINEKEYBOARD
+Wine HID compatible device=device_section,WINEBUS\WINE_COMP_HID
 
 [device_section.Services]
 AddService = winehid,0x2,svc_section
-- 
2.33.0




More information about the wine-devel mailing list