Windows 8/10 Client Support Fix

Through all the reasearch of @Eric at #21. Yep, the root cause is from WINAPI GetModuleFileNameW , i dont know why it happened, but i have found the way to fix it. It failed randomly when dinput8 call GetModuleFileNameW(0x400000, L"", 260) at 2 address for example: "0x538F2D02" and "0x5390AD14"..
As the document on MSDN:
PHP:
DWORD WINAPI GetModuleFileName(
  _In_opt_ HMODULE hModule,
  _Out_    LPTSTR  lpFilename,
  _In_     DWORD   nSize
);
Here is the result return when it failed.
PHP:
ReturnAddr(538F2D02)
The module file name is: "". Result returned: 0

ReturnAddr(5390AD14)
The module file name is: "". Result returned: 0
[BUG] DInput8Create return failed.

Here is the result return when it success.
PHP:
ReturnAddr(5DA02D02)
The module file name is: "C:\Users\Public\MapleV62\localhost.exe" . Result returned: 38

ReturnAddr(5DA1AD14)
The module file name is: "C:". Result returned: 3
As you can see, GetModuleFileNameW(0x400000, L"", 260) cannot return the path file name (the lpFilename = "" in this case) and return 0, so it made failed for DInput8Create. (Still don't know why it failed). After run client for 10+ time, i have realized that the first 4 bytes is change everytime you run the game, but the 4 last bytes never change. It is 0x2D02 and 0xAD14. So i have do more research with the result above:
1. I tried to modify and hardcode it to make lpFilename="C:\Users\Public\MapleV62\localhost.exe" and the return value is the length of lpFilename....and hell yeah.... it work perfectly every single time :thumbup1:.
2.. As some research on the internet, it tried to make dinput8 to call GetModuleFileNameW(NULL, L"", 260); and it work perfectly too.
So, after 1. and 2., i has detouring the WINAPI GetModuleFileNameW to made it call this function:



Here is the final result :laugh::thumbup1:
hi im trying to understand what to do here and how to fix this problem i don't understand here anything, could any1 clarify this? ty
 
hi im trying to understand what to do here and how to fix this problem i don't understand here anything, could any1 clarify this? ty

1. Try to make a proxy dll (find a thread in this forum, i remmeber there is already have a thread to guide you how to make proxy dll)
2. Search on google how to Detour a function with MSDetour
3. Using my code above to Detour win32's function "GetModuleFileNameW"
4. Insert detour code to proxy .dll
5. Build proxy .dll file and put it into game folder
6. Enjoy with the game.

btw: you should have a little knowledge of C++ to do all the step above
 
Im trying to set my using Client to start in Fullscreen again. It is the HeavenMS Localhost EXE (v0.83).
Using "OllyDbg" with the following Address : 009F7A9B

Now i try to change it back to be Fullscreen :

MOV EAX,0
change to
MOV EAX,DWORD PTR DS:[BF1AC8]

But it will not work and i get a Error from "OllyDbg" : Unknown Identifier :(

Can anyone help me please?
 
I created a dinput8.dll for TMS v273, the purpose of this dll is to translate the hard coded strings that exist in the tms version. However, whenever I launch the game, it tells me to delete the "hack" which is causing the game NOT to launch. Is there any fix to this?
 
Back