Devolutions / MsRdpEx

Microsoft RDP Client Extensions
MIT License
183 stars 31 forks source link

Crash on Windows 8.1 32bit #120

Open MarekKnapek opened 2 months ago

MarekKnapek commented 2 months ago

Steps to reproduce.

Exception thrown at 0x00000000 in mstscex.exe: 0xC0000005: Access violation executing location 0x00000000.

awakecoding commented 2 months ago

I'll be frank: I only added x86 support because someone complained they "might need it" and didn't want to be bothered with people asking for it. The fact is that the x86 binaries haven't properly worked in a long while and nobody noticed, kind of proving my point. Also, mstsc detects when the 32-bit executable is launched on 64-bit Windows and relaunches the correct one, and I haven't API hooked that to force 32-bit to work.

Also, Windows 8.1 is EOL now?

MarekKnapek commented 2 months ago

Yes, Windows 8.1 might be EOL. Sooo... how should this issue proceed? Is adding 32bit support too much difficult / inconvenient for you? Is support for old OS too much difficult / inconvenient for you? If yes, I suggest adding this information to the documentation and to the installer, informing the user that they are using your product on unsupported platform. Otherwise, if you are providing 32bit binaries, they better work as advertised. I'm C / C++ developer myself, maybe I could help you diagnose the root cause of this problem and help you fix it, if you are interested.

awakecoding commented 2 months ago

I just fixed the calling conventions on the API hooks (https://github.com/Devolutions/MsRdpEx/tree/x86-fixes), which I know was responsible for most of the problems. Now let me see if I can API hook IsWow64Process to force the 32-bit mstsc.exe to launch on 64-bit Windows.

awakecoding commented 2 months ago

ok so I merged the calling convention fixes, but getting the 32-bit mstsc to run on 64-bit Windows will take more work. I pushed an attempt at hooking IsWow64Process but I'm hitting a crash in Win32DpiApi::CreateInstance - keep in mind that 32-bit mstsc may not be working properly on 64-bit Windows because it's completely untested and unsupported. However, if you try running a build with the calling convention fixes on true 32-bit Windows, there's a chance it might work. I'll accept fixes if you can find the time to do the necessary work, but I won't be spending too much time on it myself, it's low priority for me.

image