Rémi Bernon (@rbernon) commented about dlls/win32u/pointer.c:
+ + return pointer; +} + +static struct pointer *find_pointerid(UINT32 id) { + struct pointer_thread_data *thread_data = get_pointer_thread_data(); + struct pointer *pointer; + + TRACE( "looking for pointer id %d\n", id ); + + LIST_FOR_EACH_ENTRY(pointer, &thread_data->known_pointers, struct pointer, entry) + if (pointer->id == id) + return pointer; + + return NULL; +} Are we truly confident that this should be a per-thread list of pointer (and I assume, later, frame history)? If there isn't already we will need tests to make sure it is and that querying pointer info and pointer history from a thread that has never processed any message indeed returns an error. Fwiw we already maintain a list of pointers on wineserver side, I suspect it should perhaps work globally instead.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/10649#note_136039