The input path goes like this: - NtUserSendHardwareInput fills `struct send_hardware_input_params` - dlls/win32u/window.c:NtUserCallHwndParam() takes data from `send_hardware_input_params` and calls send_hardware_message() - dlls/win32u/message.c:send_hardware_message() queues a message to wineserver of type 'struct send_hardware_message_request' - server/queue.c:DECL_HANDLER(send_hardware_message) wineserver receives the send_hardware_message request and processes it (sending input to relevant windows, etc...)
Just like @rbernon says it is possible to stuff data into lparam and get it all the way to wineserver. And it probably would be good to do it that way in order to avoid two server requests for every mouse move! But your changes right now do not put anything in lparam.
Current proton (and old-style wine-staging patches) puts a RAWINPUT struct in lparam but the x11drv seems to *try* to support rawinput but does it in a confusing way and does not actually work.