Zebediah Figura : hidclass.sys: Create a mouse device interface for HID mouse devices.

Alexandre Julliard julliard at winehq.org
Thu Jul 4 15:53:46 CDT 2019


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

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Tue Jul  2 18:07:58 2019 -0500

hidclass.sys: Create a mouse device interface for HID mouse devices.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hidclass.sys/device.c | 9 +++++++++
 dlls/hidclass.sys/hid.h    | 3 +++
 dlls/hidclass.sys/pnp.c    | 5 +++++
 3 files changed, 17 insertions(+)

diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c
index 9470f7d..0e905c8 100644
--- a/dlls/hidclass.sys/device.c
+++ b/dlls/hidclass.sys/device.c
@@ -33,6 +33,7 @@
 
 #include "initguid.h"
 #include "devguid.h"
+#include "ntddmou.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(hid);
 WINE_DECLARE_DEBUG_CHANNEL(hid_report);
@@ -122,6 +123,14 @@ NTSTATUS HID_LinkDevice(DEVICE_OBJECT *device)
         return status;
     }
 
+    /* FIXME: This should probably be done in mouhid.sys. */
+    if (ext->preparseData->caps.UsagePage == HID_USAGE_PAGE_GENERIC
+            && ext->preparseData->caps.Usage == HID_USAGE_GENERIC_MOUSE)
+    {
+        if (!IoRegisterDeviceInterface(device, &GUID_DEVINTERFACE_MOUSE, NULL, &ext->mouse_link_name))
+            ext->is_mouse = TRUE;
+    }
+
     return STATUS_SUCCESS;
 
 error:
diff --git a/dlls/hidclass.sys/hid.h b/dlls/hidclass.sys/hid.h
index 0f82323..86d7bdf 100644
--- a/dlls/hidclass.sys/hid.h
+++ b/dlls/hidclass.sys/hid.h
@@ -55,6 +55,9 @@ typedef struct _BASE_DEVICE_EXTENSION {
     KSPIN_LOCK irp_queue_lock;
     LIST_ENTRY irp_queue;
 
+    BOOL is_mouse;
+    UNICODE_STRING mouse_link_name;
+
     /* Minidriver Specific stuff will end up here */
 } BASE_DEVICE_EXTENSION;
 
diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c
index 8265efd..b5c9987 100644
--- a/dlls/hidclass.sys/pnp.c
+++ b/dlls/hidclass.sys/pnp.c
@@ -215,6 +215,9 @@ NTSTATUS PNP_RemoveDevice(minidriver *minidriver, DEVICE_OBJECT *device, IRP *ir
         return rc;
     }
 
+    if (ext->is_mouse)
+        IoSetDeviceInterfaceState(&ext->mouse_link_name, FALSE);
+
     if (irp)
         rc = minidriver->PNPDispatch(device, irp);
     HID_DeleteDevice(device);
@@ -294,6 +297,8 @@ NTSTATUS WINAPI HID_PNP_Dispatch(DEVICE_OBJECT *device, IRP *irp)
             rc = minidriver->PNPDispatch(device, irp);
 
             IoSetDeviceInterfaceState(&ext->link_name, TRUE);
+            if (ext->is_mouse)
+                IoSetDeviceInterfaceState(&ext->mouse_link_name, TRUE);
             return rc;
         }
         case IRP_MN_REMOVE_DEVICE:




More information about the wine-cvs mailing list