leecher1337 / ntvdmx64

Run Microsoft Windows NTVDM (DOS) on 64bit Editions
823 stars 81 forks source link

Compiling on Windows 11 24H2 x64 #282

Open aellul27 opened 1 week ago

aellul27 commented 1 week ago

I am building with autobuild-ccpu-fre.cmd. After compiling on Windows 11, I run install.bat. It reports that ntvdm.exe could not be found. After examining my log files, there is a large section with missing symbol errors, as well as header errors. I do have legacy console enabled.

3>mvdm\wow32\jpn\wsext.obj : error LNK2001: unresolved external symbol _Sim32FlushVDMPointer@16 ...

I do currently have the latest Windows SDK installed, which might be conflicting with the Windows 7 version downloaded. I'll upload my .err file as well as my full logs. I have also created an exception for the autobuild folder in Windows Defender.

buildfre.log buildfre err.log

leecher1337 commented 1 week ago

Seems you are right, can reproduce the problem. Thanks for the report. Maybe I messed something up with commit 5886c5d

aellul27 commented 6 days ago

Thanks for such a quick reply, and thank you for this amazing project! Symbols errors are gone, however I am having more errors, don't know if they're new or I missed them first time running. All build files are avaliable, but on sign in when installed the screen remains black. Task manager can be started, but no explorer.

NOTE: When using WOW32 windows doesn't even get to sign in.


BUILD: f:\minnt\base\mvdm\softpc.new\host\src\nt_bop.c(72): mvdm\softpc.new\host\src\nt_bop.c - invalid include statement: #include CpuH
BUILD: f:\minnt\base\mvdm\softpc.new\host\src\nt_cprgs.c(7): mvdm\softpc.new\host\src\nt_cprgs.c - invalid include statement: #include CpuH
...

and

BUILD: f:\minnt\base\mvdm\vdmredir\vrdlcbuf.c: cannot find include file <dlcio.h>
BUILD: f:\minnt\base\mvdm\vdmredir\vrdlcdbg.c: cannot find include file <smbgtpt.h>
BUILD: f:\minnt\base\mvdm\vdmredir\vrdlcdbg.c: cannot find include file <dlcio.h>
...
leecher1337 commented 6 days ago

The include errors usually can be ignored, there are plenty of them in there, but environment variable tells C compiler to ignore them, so that's ok. I recompiled from git repository to be safe, and installed it on a fresh windows 11 24h2 and then rebootet. Running i.e. command.com to start DOS works without issues here:

image

Did you verify that legacy console is isntalled and running properly?

aellul27 commented 6 days ago

Turns out my Windows Install was corrupted from Rectify11, and after sfc /scannow explorer and ntvdm work successfully! Thank you so much for all your help. Do you have any plans to fix WOW32 or has Microsoft just killed it off entirely?

leecher1337 commented 6 days ago

Glad to hear that it works for you now!

Currently there are no plans for fixing WOW32, because I don't have a clue how I would be able to substitue the missing USER32 functions. The problem is that the GDI functions need to interact with the 16bit handles and be able to interpret them and dispatch back to WOW32. As long as there was support for it in USER32, this kind of worked (even though it was never meant to be available on 64bit Windows, they compiled it in like in the 32bit version and therefore it just coincidentally worked on 64bit too), even though it was still a mess, because the task scheduling functions weren't available on 64bit Windows. So I had to do it a bit like winevdm (otvdm) and rely on my own scheduling code, which wasn't working really well anyway and there were a lot of situations where the cooperative multitasking scheduler got stuck. But at least it SOMEWHAT worked. Now as the USER32 integration functions got ripped out completely from the OS, they cannot be substituted and the whole concept behind WOW32 is now broken. Thus, I think it would be better to help the guys behind otvdm in improving their product as it is more future-proof, even though WOW32 had better compatibility for certain applications and therefore also has its legitimate use.

But you can still try to upvote my Windows feedback hub entry to convince Microsoft to bring back the missing functions.