Zebediah Figura : hidclass.sys: Stop creating a setupapi device.

Alexandre Julliard julliard at winehq.org
Mon Apr 19 15:38:11 CDT 2021


Module: wine
Branch: master
Commit: a17367291104e46c573b7213ee94a0f537563ace
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a17367291104e46c573b7213ee94a0f537563ace

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Sat Apr 17 19:43:26 2021 -0500

hidclass.sys: Stop creating a setupapi device.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hidclass.sys/Makefile.in |  1 -
 dlls/hidclass.sys/device.c    | 64 -------------------------------------------
 dlls/hidclass.sys/hid.h       |  1 -
 dlls/hidclass.sys/pnp.c       | 21 +++++++++++++-
 4 files changed, 20 insertions(+), 67 deletions(-)

diff --git a/dlls/hidclass.sys/Makefile.in b/dlls/hidclass.sys/Makefile.in
index 58bb2b5088f..4b1e9338eb4 100644
--- a/dlls/hidclass.sys/Makefile.in
+++ b/dlls/hidclass.sys/Makefile.in
@@ -1,7 +1,6 @@
 MODULE    = hidclass.sys
 IMPORTLIB = hidclass
 IMPORTS   = hal ntoskrnl
-DELAYIMPORTS = setupapi
 
 EXTRADLLFLAGS = -mno-cygwin
 
diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c
index ec34b6b8068..35cc40c01ea 100644
--- a/dlls/hidclass.sys/device.c
+++ b/dlls/hidclass.sys/device.c
@@ -25,7 +25,6 @@
 #include "hid.h"
 #include "winreg.h"
 #include "winuser.h"
-#include "setupapi.h"
 
 #include "wine/debug.h"
 #include "ddk/hidsdi.h"
@@ -37,69 +36,6 @@
 WINE_DEFAULT_DEBUG_CHANNEL(hid);
 WINE_DECLARE_DEBUG_CHANNEL(hid_report);
 
-/* user32 reserves 1 & 2 for winemouse and winekeyboard,
- * keep this in sync with user_private.h */
-#define WINE_MOUSE_HANDLE 1
-#define WINE_KEYBOARD_HANDLE 2
-
-static UINT32 alloc_rawinput_handle(void)
-{
-    static LONG counter = WINE_KEYBOARD_HANDLE + 1;
-    return InterlockedIncrement(&counter);
-}
-
-NTSTATUS HID_LinkDevice(DEVICE_OBJECT *device)
-{
-    WCHAR device_instance_id[MAX_DEVICE_ID_LEN];
-    SP_DEVINFO_DATA Data;
-    HDEVINFO devinfo;
-    BASE_DEVICE_EXTENSION *ext;
-    USAGE usage, page;
-
-    ext = device->DeviceExtension;
-    page = ext->u.pdo.preparsed_data->caps.UsagePage;
-    usage = ext->u.pdo.preparsed_data->caps.Usage;
-
-    lstrcpyW(device_instance_id, ext->device_id);
-    lstrcatW(device_instance_id, L"\\");
-    lstrcatW(device_instance_id, ext->instance_id);
-
-    devinfo = SetupDiCreateDeviceInfoList(&GUID_DEVCLASS_HIDCLASS, NULL);
-    if (devinfo == INVALID_HANDLE_VALUE)
-    {
-        FIXME( "failed to get ClassDevs %x\n", GetLastError());
-        return STATUS_UNSUCCESSFUL;
-    }
-    Data.cbSize = sizeof(Data);
-    if (SetupDiCreateDeviceInfoW(devinfo, device_instance_id, &GUID_DEVCLASS_HIDCLASS, NULL, NULL, DICD_INHERIT_CLASSDRVS, &Data))
-    {
-        if (!SetupDiRegisterDeviceInfo(devinfo, &Data, 0, NULL, NULL, NULL))
-        {
-            FIXME( "failed to register device info %x\n", GetLastError());
-            goto error;
-        }
-    }
-    else if (GetLastError() != ERROR_DEVINST_ALREADY_EXISTS)
-    {
-        FIXME( "failed to create device info %x\n", GetLastError());
-        goto error;
-    }
-    SetupDiDestroyDeviceInfoList(devinfo);
-
-    if (page == HID_USAGE_PAGE_GENERIC && usage == HID_USAGE_GENERIC_MOUSE)
-        ext->u.pdo.rawinput_handle = WINE_MOUSE_HANDLE;
-    else if (page == HID_USAGE_PAGE_GENERIC && usage == HID_USAGE_GENERIC_KEYBOARD)
-        ext->u.pdo.rawinput_handle = WINE_KEYBOARD_HANDLE;
-    else
-        ext->u.pdo.rawinput_handle = alloc_rawinput_handle();
-
-    return STATUS_SUCCESS;
-
-error:
-    SetupDiDestroyDeviceInfoList(devinfo);
-    return STATUS_UNSUCCESSFUL;
-}
-
 IRP *pop_irp_from_queue(BASE_DEVICE_EXTENSION *ext)
 {
     LIST_ENTRY *entry;
diff --git a/dlls/hidclass.sys/hid.h b/dlls/hidclass.sys/hid.h
index 2a5636121be..9e829332bdc 100644
--- a/dlls/hidclass.sys/hid.h
+++ b/dlls/hidclass.sys/hid.h
@@ -106,7 +106,6 @@ typedef struct _minidriver
 NTSTATUS call_minidriver(ULONG code, DEVICE_OBJECT *device, void *in_buff, ULONG in_size, void *out_buff, ULONG out_size) DECLSPEC_HIDDEN;
 
 /* Internal device functions */
-NTSTATUS HID_LinkDevice(DEVICE_OBJECT *device) DECLSPEC_HIDDEN;
 void HID_StartDeviceThread(DEVICE_OBJECT *device) DECLSPEC_HIDDEN;
 
 IRP *pop_irp_from_queue(BASE_DEVICE_EXTENSION *ext) DECLSPEC_HIDDEN;
diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c
index 5134cb3569a..b9208d146e6 100644
--- a/dlls/hidclass.sys/pnp.c
+++ b/dlls/hidclass.sys/pnp.c
@@ -86,6 +86,17 @@ static NTSTATUS get_device_id(DEVICE_OBJECT *device, BUS_QUERY_ID_TYPE type, WCH
     return irp_status.u.Status;
 }
 
+/* user32 reserves 1 & 2 for winemouse and winekeyboard,
+ * keep this in sync with user_private.h */
+#define WINE_MOUSE_HANDLE 1
+#define WINE_KEYBOARD_HANDLE 2
+
+static UINT32 alloc_rawinput_handle(void)
+{
+    static LONG counter = WINE_KEYBOARD_HANDLE + 1;
+    return InterlockedIncrement(&counter);
+}
+
 static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *bus_pdo)
 {
     WCHAR device_id[MAX_DEVICE_ID_LEN], instance_id[MAX_DEVICE_ID_LEN], pdo_name[255];
@@ -93,6 +104,7 @@ static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *b
     HID_DEVICE_ATTRIBUTES attr = {0};
     DEVICE_OBJECT *fdo, *child_pdo;
     UNICODE_STRING string;
+    USAGE page, usage;
     NTSTATUS status;
     minidriver *minidriver;
     HID_DESCRIPTOR descriptor;
@@ -214,7 +226,14 @@ static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *b
 
     IoInvalidateDeviceRelations(bus_pdo, BusRelations);
 
-    HID_LinkDevice(child_pdo);
+    page = pdo_ext->u.pdo.preparsed_data->caps.UsagePage;
+    usage = pdo_ext->u.pdo.preparsed_data->caps.Usage;
+    if (page == HID_USAGE_PAGE_GENERIC && usage == HID_USAGE_GENERIC_MOUSE)
+        pdo_ext->u.pdo.rawinput_handle = WINE_MOUSE_HANDLE;
+    else if (page == HID_USAGE_PAGE_GENERIC && usage == HID_USAGE_GENERIC_KEYBOARD)
+        pdo_ext->u.pdo.rawinput_handle = WINE_KEYBOARD_HANDLE;
+    else
+        pdo_ext->u.pdo.rawinput_handle = alloc_rawinput_handle();
 
     pdo_ext->u.pdo.poll_interval = DEFAULT_POLL_INTERVAL;
 




More information about the wine-cvs mailing list