When League of Legends game released update 13.23 it stopped working in Wine.
Initially we didn't know why it stopped working and due to anti-cheat it was quite difficult to figure out what exactly is happening and so we were just trying to implement random things.
One of the differences when comparing previous version with this version was the addition of something like this to their anti-cheat:
```c
size_t size = 0x100000;
int finalClass = 0xef;
char *buffer = malloc(size * finalClass);
ULONG length;
for (int informationClass=0x00, informationClass < finalClass; informationClass++) {
NtQuerySystemInformation(informationClass, buffer + size * informationClass, size, &length);
}
// later use stuff from there, of course everything's highly obfuscated
```
Essentially this hides what exactly they need since it could be any of classes.
So we started to implement most likely classes that might be used to work like they do in Windows.
This MR contains improvement of `SystemModuleInformationEx` so result will match pretty much exactly how it would on Windows.
I only didn't include more modules but if anyone ever needs that it's very simple to add those.
Also one of the things I noticed is that on Windows even if you give smaller buffer size it will still fill it with data unlike current Wine implementation and this is true for most of classes.
Anyway in the end it turned out not to be issue/needed but I think it still could be useful.
--
v3: ntdll: Improve NtQuerySystemInformation(SystemModuleInformationEx)
https://gitlab.winehq.org/wine/wine/-/merge_requests/4832
Unlike previous vkd3d-utils interfaces, ID3D12ShaderReflection is rather more
large and complex, and will probably end up needing several new individual
scan interfaces from vkd3d-shader, which are themselves not exactly trivial to
design.
Therefore, instead of implementing everything in vkd3d-shader and then hooking
up the vkd3d-utils interfaces on top of that, this patch series copies the
existing implementation of reflection and then begins the process of moving its
implementation to vkd3d-shader.
The primary motivation here is to add reflection crosstests (primarily for the
benefit of the HLSL compiler) without being blocked on API design. Part 2 of
this patch series does this.
--
v2: tests: Test signature reflection via D3DReflect().
tests: Test VKD3D_SHADER_COMPILE_OPTION_BACKCOMPAT_MAP_SEMANTIC_NAMES.
vkd3d-utils: Use vkd3d_shader_scan() to retrieve signature information.
vkd3d-utils: Strip d3dcompiler_ prefix from reflection definitions.
vkd3d-utils: Add D3DReflect().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/561
Goes atop !537.
--
v5: tests/d3d12: Test multiple clip distance inputs in test_clip_distance().
tests/d3d12: Use 5 clip distances for the multiple test in test_clip_distance().
vkd3d-shader/ir: Transform clip/cull outputs and patch constants into arrays.
vkd3d-shader/ir: Transform clip/cull inputs into an array.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/564