[FREELDR] Properly set keyboard flags in hardware detection (#2288)

See https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_cm_keyboard_device_data
This commit is contained in:
Dmitry Borisov 2020-01-29 21:49:31 +06:00 committed by GitHub
parent 4c0426ec44
commit e00ea7dadd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -919,6 +919,7 @@ DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey)
PCM_KEYBOARD_DEVICE_DATA KeyboardData;
PCONFIGURATION_COMPONENT_DATA PeripheralKey;
ULONG Size;
REGS Regs;
/* HACK: don't call DetectKeyboardDevice() as it fails in Qemu 0.8.2
if (DetectKeyboardDevice()) */
@ -944,12 +945,21 @@ DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey)
PartialDescriptor->ShareDisposition = CmResourceShareUndetermined;
PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_KEYBOARD_DEVICE_DATA);
/* Int 16h AH=02h
* KEYBOARD - GET SHIFT FLAGS
*
* Return:
* AL - shift flags
*/
Regs.b.ah = 0x02;
Int386(0x16, &Regs, &Regs);
KeyboardData = (PCM_KEYBOARD_DEVICE_DATA)(PartialDescriptor + 1);
KeyboardData->Version = 1;
KeyboardData->Revision = 1;
KeyboardData->Type = 4;
KeyboardData->Subtype = 0;
KeyboardData->KeyboardFlags = 0x20;
KeyboardData->KeyboardFlags = Regs.b.al;
/* Create controller key */
FldrCreateComponentKey(ControllerKey,