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