Rémi Bernon (@rbernon) commented about dlls/win32u/message.c:
} else if (info.msg.message == WH_MOUSE_LL && size >= sizeof(msg_data->hardware)) {
RECT rect = {info.msg.pt.x, info.msg.pt.y, info.msg.pt.x, info.msg.pt.y}; MSLLHOOKSTRUCT hook;
rect = map_rect_raw_to_virt( rect, get_thread_dpi() );
info.msg.pt.x = rect.left;
info.msg.pt.y = rect.top;
I'm not very confident about hook chain logic but I think this only happens when the first hook is called. It then raises the question to whether this is the right place to do this, or whether it would be better in `call_hook`, right before the hook is actually called. In particular `get_thread_dpi` could return different values depending on the thread / process DPI awareness, and that also raises the question to whether ll-hook pointer position needs to be DPI mapped or not.