> Microsoft has only kept the documentation for the DX8 version of EnumDevices left online
This saddens me. Who knows how much valuable info has been lost. I recall back in the days of MSDN, we had docs back to early Windows, and it was a wonderful historical record. Today's Docs site seems to keep info only for a few versions.
I was quite interested in the patch -- am I right in thinking the DirectX library only exports a single function and _everything_ else is through DX interfaces?
I expected to see significantly more code, pass-through to the original DLL.
Its interesting to see how bad assumptions that almost certainly held up at the time really don't any more and that leads to this bug being exposed. Modern machines have a lot more addressable devices and a failure to properly filter and using a vector ultimately leads to a bug that on the surface feels like since it works on Win98 must be caused by Windows but isn't.
The cool part of this adventure is that the author was able to write this DLL patch purely in rust! Good testament of how far it has come. Can't wait to see more C code ported to either Golang or Rust!
I appreciated the footnote on filesize optimization as someone who's constantly trying to compulsively generate the smallest binaries possible.
Interesting article, thank you.
Nice write-up. Reminds me that debugging is the most fun part of programming!
I love hard-core deep debugging for stuff like this. Great work!!
Why an extra DLL instead of just patching the game executable? With some luck it is a one byte patch (from push 0 to push 4).
Thanks for the flashback :)
I have had very bad success rate with my old Windows CDROM/DVD era games. Pretty much all of them either have some kind of DRM or they run but with bugs.
When available I just buy the GOG versions instead, but even those versions sadly often have issues.
Meanwhile slightly older games from the DOS era works perfectly everywhere thanks to DOSBox. I would love to see something like that for old Windows. Merge DOSBox with WINE, someone?