In order to avoid having to duplicate the scan2vk mapping in the drivers, I would suggest maybe extending the `NtUserSendHardwareInput` call, for instance with a custom flag and add support for syncing the full keystate, passing the state array in lparam (and some dummy INPUT_KEYBOARD structure).
You could then probably re-use the `send_hardware_message` request HID report data to pass the new vkey state to wineserver, and handle the key updates there, that would save some `get_async_keystate` roundtrips.