From af2b2d0433dd1a591fe574945699f32d467cd4b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Wed, 5 May 2021 11:51:54 +0200 Subject: [PATCH] hidclass.sys: Call IoInvalidateDeviceRelations before IoSetDevicePropertyData. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise setupapi may fail to find the device on which to set the property. This triggers messages like the following the first time a device is created (on prefix creation for mouse and keyboard devices): IoSetDevicePropertyData Failed to open device, error 0xe000020b. Some IoSetDevicePropertyData implementation detail makes it always return successfully but it's not doing anything and user32 will then ignore the device when it enumerates rawinput devices. Signed-off-by: RĂ©mi Bernon Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/hidclass.sys/pnp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c index 2769b78c13b..4490f1eba23 100644 --- a/dlls/hidclass.sys/pnp.c +++ b/dlls/hidclass.sys/pnp.c @@ -245,6 +245,8 @@ static void create_child(minidriver *minidriver, DEVICE_OBJECT *fdo) else pdo_ext->u.pdo.rawinput_handle = alloc_rawinput_handle(); + IoInvalidateDeviceRelations(fdo_ext->u.fdo.hid_ext.PhysicalDeviceObject, BusRelations); + if ((status = IoSetDevicePropertyData(child_pdo, &DEVPROPKEY_HID_HANDLE, LOCALE_NEUTRAL, PLUGPLAY_PROPERTY_PERSISTENT, DEVPROP_TYPE_UINT32, sizeof(pdo_ext->u.pdo.rawinput_handle), &pdo_ext->u.pdo.rawinput_handle))) @@ -254,8 +256,6 @@ static void create_child(minidriver *minidriver, DEVICE_OBJECT *fdo) return; } - IoInvalidateDeviceRelations(fdo_ext->u.fdo.hid_ext.PhysicalDeviceObject, BusRelations); - pdo_ext->u.pdo.poll_interval = DEFAULT_POLL_INTERVAL; pdo_ext->u.pdo.ring_buffer = RingBuffer_Create(