Zebediah Figura : hidclass.sys: Create a mouse device interface for HID mouse devices.
Module: wine Branch: master Commit: b84334d2bd3e507f5c7b81ce13c22f8f76cdce3e URL: https://source.winehq.org/git/wine.git/?a=commit;h=b84334d2bd3e507f5c7b81ce1... Author: Zebediah Figura <zfigura(a)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(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)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:
participants (1)
-
Alexandre Julliard