Rémi Bernon : hidclass.sys: Only send WM_INPUT messages for HID devices.

Alexandre Julliard julliard at winehq.org
Wed Sep 22 16:04:38 CDT 2021


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

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Wed Sep 22 12:27:26 2021 +0200

hidclass.sys: Only send WM_INPUT messages for HID devices.

And not for the internal WINEXINPUT devices.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hidclass.sys/device.c | 43 +++++++++++++++++++++++--------------------
 1 file changed, 23 insertions(+), 20 deletions(-)

diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c
index 8e998bd71be..848f8da906a 100644
--- a/dlls/hidclass.sys/device.c
+++ b/dlls/hidclass.sys/device.c
@@ -190,27 +190,30 @@ static void hid_device_queue_input( DEVICE_OBJECT *device, HID_XFER_PACKET *pack
     KIRQL irql;
     IRP *irp;
 
-    size = offsetof( RAWINPUT, data.hid.bRawData[packet->reportBufferLen] );
-    if (!(rawinput = malloc( size ))) ERR( "Failed to allocate rawinput data!\n" );
-    else
+    if (IsEqualGUID( ext->class_guid, &GUID_DEVINTERFACE_HID ))
     {
-        INPUT input;
-
-        rawinput->header.dwType = RIM_TYPEHID;
-        rawinput->header.dwSize = size;
-        rawinput->header.hDevice = ULongToHandle( ext->u.pdo.rawinput_handle );
-        rawinput->header.wParam = RIM_INPUT;
-        rawinput->data.hid.dwCount = 1;
-        rawinput->data.hid.dwSizeHid = packet->reportBufferLen;
-        memcpy( rawinput->data.hid.bRawData, packet->reportBuffer, packet->reportBufferLen );
-
-        input.type = INPUT_HARDWARE;
-        input.hi.uMsg = WM_INPUT;
-        input.hi.wParamH = 0;
-        input.hi.wParamL = 0;
-        __wine_send_input( 0, &input, rawinput );
-
-        free( rawinput );
+        size = offsetof( RAWINPUT, data.hid.bRawData[packet->reportBufferLen] );
+        if (!(rawinput = malloc( size ))) ERR( "Failed to allocate rawinput data!\n" );
+        else
+        {
+            INPUT input;
+
+            rawinput->header.dwType = RIM_TYPEHID;
+            rawinput->header.dwSize = size;
+            rawinput->header.hDevice = ULongToHandle( ext->u.pdo.rawinput_handle );
+            rawinput->header.wParam = RIM_INPUT;
+            rawinput->data.hid.dwCount = 1;
+            rawinput->data.hid.dwSizeHid = packet->reportBufferLen;
+            memcpy( rawinput->data.hid.bRawData, packet->reportBuffer, packet->reportBufferLen );
+
+            input.type = INPUT_HARDWARE;
+            input.hi.uMsg = WM_INPUT;
+            input.hi.wParamH = 0;
+            input.hi.wParamL = 0;
+            __wine_send_input( 0, &input, rawinput );
+
+            free( rawinput );
+        }
     }
 
     if (!(last_report = hid_report_create( packet )))




More information about the wine-cvs mailing list