+ /* Check if the state of the indicators has been changed */
+ if ((oldState ^ newState) & (NUMLOCK_ON | CAPSLOCK_ON | SCROLLLOCK_ON))
+ {
+ IO_STATUS_BLOCK IoStatusBlock;
+ NTSTATUS Status;
+ KEYBOARD_INDICATOR_PARAMETERS kip;
+
+ kip.LedFlags = 0;
+ kip.UnitId = 0;
+
+ if ((newState & NUMLOCK_ON))
+ kip.LedFlags |= KEYBOARD_NUM_LOCK_ON;
+
+ if ((newState & CAPSLOCK_ON))
+ kip.LedFlags |= KEYBOARD_CAPS_LOCK_ON;
+
+ if ((newState & SCROLLLOCK_ON))
+ kip.LedFlags |= KEYBOARD_SCROLL_LOCK_ON;
+
+ /* Update the state of the leds on primary keyboard */
+ DPRINT("NtDeviceIoControlFile dwLeds=%x\n", kip.LedFlags);
+
+ Status = NtDeviceIoControlFile(
+ hConsoleInput,
+ NULL,
+ NULL,
+ NULL,
+ &IoStatusBlock,
+ IOCTL_KEYBOARD_SET_INDICATORS,
+ &kip,
+ sizeof(kip),
+ NULL,
+ 0);
+
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("NtDeviceIoControlFile(IOCTL_KEYBOARD_SET_INDICATORS) failed (Status %lx)\n", Status);
+ }
+ } else
+ /* Normal press/release state handling */