Getting MS-DOS games to run on Windows 95: Virtual memory
A lot of games of the pre-Windows 95 era use so-called MS-DOS Extenders, which are libraries that provide a protected-mode environment to MS-DOS applications. The application is technically two...
View ArticleWhy doesn’t a program show up on the Start menu’s Recently Used Programs list...
A customer had a question about the Start menu’s Recently Used Programs list: Start with a brand new machine. If you double-click a document which is associated with a program, the associated program...
View ArticleThe numerology of the build, redux
I noted some time ago that starting in Windows Vista, final build numbers must be a multiple of 16. Why is that? The version number comes in four parts, each consisting of a 16-bit integer:...
View ArticleWhy are there four functions for parsing strings into GUIDs, and why are they...
Some time ago, we discussed the differences among various functions that take a string and produce a GUID-like thing. Let’s look at that table. Function Exported by UuidFromString rpcrt4.dll...
View ArticleIs it really a prank if the victim doesn’t realize there’s a prank going on?
One of my friends pranked a colleague by surreptitiously putting a program in the Startup group. This program opened a network socket and awaited further instructions. Things you could tell the...
View ArticleGetting MS-DOS games to run on Windows 95: Working around the iretd problem
Today’s story is the story of Speed Racer in the Challenge of Racer X. Here goes. The really scary thing is that I still remember the details. To this day, I can’t bear to listen to the Speed Racer...
View ArticleDubious security vulnerability: Disk space consumption
Today’s dubious security vulnerability goes like this: The $RECYCLE.BIN directory can be used to launch a denial of service attack that is not detected by any current anti-malware software. An...
View ArticleHow does GetFinalPathNameByHandle choose the name if there are multiple names...
Alex Shalimov wonders how the GetFinalPathNameByHandle behaves in the face of hard links. If there are multiple equivalent names, which one is returned? The function returns the name that was...
View ArticleWhy can’t the debugger call GetFinalPathNameByHandle via .call?
There were a number of follow-up questions to my demonstration of calling the GetFinalPathNameByHandleW function from the debugger. Mason Wheeler asks, “What debugger is this? Why doesn’t it have...
View ArticleWhy does FindExecutable behave erratically for files with extensions longer...
The FindExecutable function looks up the executable responsible for launching a particular file. This is a dubious undertaking, because it assumes that the thing that launches a file is an...
View ArticleGetting MS-DOS games to run on Windows 95: The interrupt flag
In the flags register of the 80386 processor is a flag called the interrupt flag. If the flag is set, then the CPU will respond to hardware interrupts. If the flag is clear, then the CPU will ignore...
View ArticleInherited access control entries are captured when the child object is created
In the discussion of how to change permissions as fast as Explorer does it, it appears that it was not clear to people how inherited access control entries work, so there were a lot of suggestions...
View ArticleIf relocated DLLs cannot share pages, then doesn’t ASLR cause all pages to be...
Commenter Medinoc wonders whether it’s still the case that relocated DLLs can’t be shared in memory. If so, then doesn’t ASLR cause all pages to become non-sharable? There are multiple things in play...
View ArticleInherited access control entries are captured when the child object is created
In the discussion of how to change permissions as fast as Explorer does it, it appears that it was not clear to people how inherited access control entries work, so there were a lot of suggestions...
View ArticleEven though the target audience may be programmers, it can still be seen by...
The access violation error message erroneously reports execute errors as write errors, which is probably for the better, seeing as end users are not going to understand the technical term “execute”,...
View ArticleWhat happens if I call EnumPropsEx while another thread is mutating the...
Following up on the question Are SetProp and RemoveProp thread-safe?, you might wonder what happens if you call EnumPropsEx while another thread is mutating the properties? The answer is similar to...
View ArticleGetting MS-DOS games to run on Windows 95: Too much memory!
Piggybacking on Roger Lipscombe’s story of the MS-DOS extender that didn’t work if you have 64MB of RAM: There was a popular MS-DOS game from 1994 that didn’t run in Windows 95. After some...
View ArticleWhy is there a screen that says “It is now safe to turn off your computer”?
I don’t know whose idea it was, but Windows 95 added a screen that appeared when you shut down Windows. It’s now safe to turn offyour computer. This message was added because people would shut down...
View ArticleWhy are mouse wheel messages delivered to the focus window instead of the...
Douglas asks, “Is there a good reason that mouse wheel messages are sent to the focused window instead of the window under the mouse?” I don’t know if there’s a good reason, but there’s a reason. The...
View ArticleIt rather involved being on the other side of this airtight hatchway: Invalid...
We received a very professional security vulnerability report from a video driver manufacturer which reported a security vulnerability in DirectX. You can tell it’s a professional operation because...
View Article