Esme Povirk (@madewokherd) commented about dlls/gdiplus/tests/image.c:
> stat = pGdipCreateEffect(BlurEffectGuid, NULL);
> expect(InvalidParameter, stat);
>
> + stat = pGdipGetEffectParameterSize(NULL, NULL);
> + expect(InvalidParameter, stat);
> +
> + stat = pGdipGetEffectParameterSize(effect, NULL);
`effect` is NULL here, so this test is redundant.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4661#note_58652
Currently there is `NtContinue()` test only for `aarch64` so implement it for amd64 aswell.
This implementation is very similar to `aarch64` and it's very basic test.
It doesn't change/test `ContextFlags` so it won't catch https://bugs.winehq.org/show_bug.cgi?id=56050 but that can be implemented later on top of this.
--
v11: ntdll/tests: Implement test_continue() for amd64
https://gitlab.winehq.org/wine/wine/-/merge_requests/4720
This MR implements `NtContinueEx(PCONTEXT, PCONTINUE_OPTIONS)` which was added in Windows 10 20H1.
Also added basic test reusing existing `test_continue()` (included from !4720)
League of Legends game hooks `NtContinue()` and `NtContinueEx()` by putting `jmp` instruction in front of it.
Note that LoL doesn't actually use `NtContinueEx()` itself and game will work fine without it but if game doesn't find `NtContinueEx()` it will permanently ban your account due to detecting "scripting program"
--
v4: ntdll/tests: Add basic test for NtContinueEx()
ntdll: NtContinueEx() handle few error cases
ntdll: Implement NtContinueEx()
ntdll/tests: Implement test_continue() for amd64
https://gitlab.winehq.org/wine/wine/-/merge_requests/4761
Since they're asm functions they conflict when building with LTO (among other things). This is normally hidden when separating translation units, but it's still not correct.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4883
On Tue Jan 23 13:57:14 2024 +0000, Fabian Maurer wrote:
> It copies but then gives `STATUS_INFO_LENGTH_MISMATCH`? And returning
> `STATUS_ACCESS_VIOLATION` has priority over `STATUS_INFO_LENGTH_MISMATCH`?
> Not saying you're wrong, just wondering. Would you mind adding tests for that?
This is current behavior on Windows 10 22H2:
```
NULL buffer and size = 0 -> STATUS_INFO_LENGTH_MISMATCH, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
NULL buffer and size > 0 -> STATUS_ACCESS_VIOLATION, ReturnLength=0
valid buffer and size = 0 -> STATUS_INFO_LENGTH_MISMATCH, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size > 0 -> STATUS_INFO_LENGTH_MISMATCH, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size < 1*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_INFO_LENGTH_MISMATCH, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size = 1*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_SUCCESS, ReturnLength= 1*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size > 1*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_INFO_LENGTH_MISMATCH, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size = 2*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_SUCCESS, ReturnLength= 2*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size < cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_INFO_LENGTH_MISMATCH, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size = cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_SUCCESS, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
valid buffer and size > cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_INFO_LENGTH_MISMATCH, ReturnLength=cpus*sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
```
Wine has few differences regarding this but here this MR fixes only single case
```
size % sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) -> STATUS_SUCCESS
```
Handling of `STATUS_ACCESS_VIOLATION` and `ReturnLength` is not changed.
And regarding test, actually Wine already has such test, see [info.c#752](https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/ntdll/te…
```c
ok( status == STATUS_SUCCESS || status == STATUS_INFO_LENGTH_MISMATCH /* vista */,
"Expected STATUS_SUCCESS or STATUS_INFO_LENGTH_MISMATCH, got %08lx\n", status);
```
It looks like before Vista it returned `STATUS_SUCCESS` which is current Wine implementation, but since Vista it started to return `STATUS_INFO_LENGTH_MISMATCH` instead
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4834#note_58632