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)