From 9748e8bde3f8ebffa0008fb11bb5976d0eea8218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 13 Aug 2017 13:11:43 +0000 Subject: [PATCH] [USETUP] Remove one special case for keyboard devices Keyboard devices must have an upperfilter (kdbclass) to work correctly. Detect these devices using the Keyboard GUID class instead of using the inf section name. svn path=/trunk/; revision=75532 --- reactos/base/setup/usetup/interface/devinst.c | 17 +++++++++-------- reactos/boot/bootdata/txtsetup.sif | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/reactos/base/setup/usetup/interface/devinst.c b/reactos/base/setup/usetup/interface/devinst.c index a1865410b9a..354be13075c 100644 --- a/reactos/base/setup/usetup/interface/devinst.c +++ b/reactos/base/setup/usetup/interface/devinst.c @@ -50,14 +50,13 @@ InstallDriver( OBJECT_ATTRIBUTES ObjectAttributes; HANDLE hService; INFCONTEXT Context; - LPWSTR Driver, ImagePath, FullImagePath; + LPWSTR Driver, ClassGuid, ImagePath, FullImagePath; ULONG dwValue; ULONG Disposition; NTSTATUS Status; BOOLEAN deviceInstalled = FALSE; UNICODE_STRING UpperFiltersU = RTL_CONSTANT_STRING(L"UpperFilters"); LPWSTR keyboardClass = L"kbdclass\0"; - BOOLEAN keyboardDevice = FALSE; /* Check if we know the hardware */ if (!SetupFindFirstLineW(hInf, L"HardwareIdsDatabase", HardwareId, &Context)) @@ -65,17 +64,19 @@ InstallDriver( if (!INF_GetDataField(&Context, 1, &Driver)) return FALSE; + /* Get associated class GUID (if any) */ + if (!INF_GetDataField(&Context, 2, &ClassGuid)) + ClassGuid = NULL; + /* Find associated driver name */ /* FIXME: check in other sections too! */ if (!SetupFindFirstLineW(hInf, L"BootBusExtenders.Load", Driver, &Context) && !SetupFindFirstLineW(hInf, L"BusExtenders.Load", Driver, &Context) && !SetupFindFirstLineW(hInf, L"SCSI.Load", Driver, &Context) - && !SetupFindFirstLineW(hInf, L"InputDevicesSupport.Load", Driver, &Context)) + && !SetupFindFirstLineW(hInf, L"InputDevicesSupport.Load", Driver, &Context) + && !SetupFindFirstLineW(hInf, L"Keyboard.Load", Driver, &Context)) { - if (!SetupFindFirstLineW(hInf, L"Keyboard.Load", Driver, &Context)) - return FALSE; - - keyboardDevice = TRUE; + return FALSE; } if (!INF_GetDataField(&Context, 1, &ImagePath)) @@ -142,7 +143,7 @@ InstallDriver( ImagePath, (wcslen(ImagePath) + 1) * sizeof(WCHAR)); - if (keyboardDevice) + if (ClassGuid &&_wcsicmp(ClassGuid, L"{4D36E96B-E325-11CE-BFC1-08002BE10318}") == 0) { DPRINT1("Installing keyboard class driver for '%S'\n", DeviceId); NtSetValueKey(hDeviceKey, diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index 50ea98eaa5f..b250b9580df 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -94,12 +94,12 @@ PCI\CC_0C0300 = usbuhci PCI\CC_0C0310 = usbohci PCI\CC_0C0320 = usbehci USB\Class_08&SubClass_06&Prot_50 = usbstor -HID_DEVICE_SYSTEM_KEYBOARD = kbdhid +HID_DEVICE_SYSTEM_KEYBOARD = kbdhid,{4D36E96B-E325-11CE-BFC1-08002BE10318} USB\COMPOSITE = usbccgp GenDisk = disk USB\Class_03 = hidusb GENERIC_HID_DEVICE = hidusb -*PNP0303 = i8042prt +*PNP0303 = i8042prt,{4D36E96B-E325-11CE-BFC1-08002BE10318} ROOT\SWENUM = swenum [BootBusExtenders.Load]