diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c index 35cc40c01ea..a7825080deb 100644 --- a/dlls/hidclass.sys/device.c +++ b/dlls/hidclass.sys/device.c @@ -32,6 +32,7 @@ #include "ddk/wdm.h" #include "devguid.h" #include "ntddmou.h" +#include "ntddkbd.h" WINE_DEFAULT_DEBUG_CHANNEL(hid); WINE_DECLARE_DEBUG_CHANNEL(hid_report); diff --git a/dlls/hidclass.sys/hid.h b/dlls/hidclass.sys/hid.h index 9e829332bdc..5a502840691 100644 --- a/dlls/hidclass.sys/hid.h +++ b/dlls/hidclass.sys/hid.h @@ -69,6 +69,8 @@ typedef struct _BASE_DEVICE_EXTENSION BOOL is_mouse; UNICODE_STRING mouse_link_name; + BOOL is_keyboard; + UNICODE_STRING keyboard_link_name; } pdo; } u; diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c index de6f409a16b..3d81c16356e 100644 --- a/dlls/hidclass.sys/pnp.c +++ b/dlls/hidclass.sys/pnp.c @@ -23,6 +23,7 @@ #include #include "hid.h" #include "ntddmou.h" +#include "ntddkbd.h" #include "ddk/hidtypes.h" #include "ddk/wdm.h" #include "regstr.h" @@ -399,10 +400,18 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device, IRP *irp) if (!IoRegisterDeviceInterface(device, &GUID_DEVINTERFACE_MOUSE, NULL, &ext->u.pdo.mouse_link_name)) ext->u.pdo.is_mouse = TRUE; } + if (ext->u.pdo.preparsed_data->caps.UsagePage == HID_USAGE_PAGE_GENERIC + && ext->u.pdo.preparsed_data->caps.Usage == HID_USAGE_GENERIC_KEYBOARD) + { + if (!IoRegisterDeviceInterface(device, &GUID_DEVINTERFACE_KEYBOARD, NULL, &ext->u.pdo.keyboard_link_name)) + ext->u.pdo.is_keyboard = TRUE; + } IoSetDeviceInterfaceState(&ext->u.pdo.link_name, TRUE); if (ext->u.pdo.is_mouse) IoSetDeviceInterfaceState(&ext->u.pdo.mouse_link_name, TRUE); + if (ext->u.pdo.is_keyboard) + IoSetDeviceInterfaceState(&ext->u.pdo.keyboard_link_name, TRUE); status = STATUS_SUCCESS; break; @@ -413,6 +422,8 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device, IRP *irp) IoSetDeviceInterfaceState(&ext->u.pdo.link_name, FALSE); if (ext->u.pdo.is_mouse) IoSetDeviceInterfaceState(&ext->u.pdo.mouse_link_name, FALSE); + if (ext->u.pdo.is_keyboard) + IoSetDeviceInterfaceState(&ext->u.pdo.keyboard_link_name, TRUE); if (ext->u.pdo.thread) {