https://bugs.winehq.org/show_bug.cgi?id=45455
--- Comment #11 from Alex Henrie alexhenrie24@gmail.com --- Great job Fabian! Now we know that the first argument is a WCHAR*. If I understand the x86-64 calling convention [1] correctly, the first four arguments are passed as 64-bit registers even if they are only 32 bits. That means that we can make the next three arguments void* without breaking anything. And since the last two arguments are definitely pointers, that just leaves the fifth argument, so if the fifth argument isn't a DWORD, it must be a pointer.
If a stub function is good enough to get these apps working, we don't need to know what all of the arguments are for. We can just make all of them (except the first one) void* and name them unk1 through unk6. Can you try that and confirm that it doesn't crash?
[1] https://learn.microsoft.com/en-us/cpp/build/x64-calling-convention?view=msvc...