Module: wine Branch: master Commit: b84334d2bd3e507f5c7b81ce13c22f8f76cdce3e URL: https://source.winehq.org/git/wine.git/?a=commit;h=b84334d2bd3e507f5c7b81ce1...
Author: Zebediah Figura zfigura@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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: