On Tue Aug 4 16:19:42 2026 +0000, Bernhard Übelacker wrote:
Currently `entry_count` and `pointer_count` are [only out parameter](https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/win32u/input.c?ref_ty...) of `NtUserGetPointerInfoList`. Also the tests set these variables to `2`, while only providing a size for one record, and the test succeeds, so it looks like both values are only set but not used in the function. Even providing memory for two records seems to make the function fail, like in this [testbot run](https://testbot.winehq.org/JobDetails.pl?Key=163912). In Wine's `NtUserGetPointerInfoList` is also [any size different than one record rejected](https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/win32u/input.c?ref_ty...) (except for `PT_MOUSE`). So I am not sure how to proceed, do you have more details on how to retrieve multiple records in a single call from `NtUserGetPointerInfoList`? Do we need to handle this in the wow64 layer even when the implementation does not yet support it? The `size` value is supposed to be the size of a single record, so that `NtUserGetPointerInfoList` can check that it's consistent with the pointer type. The buffer capacity is likely `*entry_count * *pointer_count` on input, as is described in `GetPointerFrameInfoHistory` documentation. The actual counts are returned on output, as described too, and that can be larger than capacity.
I don't know how to generate such case, and the tests only managed to create pointer frame one at a time, but I think `NtUserGetPointerInfoList` wow64 thunk should be ready for more, as it's backing `GetPointerFrameInfoHistory` and similar, so we don't trip on it later on. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11373#note_148132