Follow

working on the windows program compatibility team must be hell on earth

cc @OCRbot

why on earth would you do this instead of navigating to C:\ directly aaaaAAAAAA

Show thread

Another example of a program’s reliance on a bug is a shell extension that
relied on a memory leak in Explorer.

no no no no no no no

Show thread

relying on a memory leak is the most cursed programming decision ive ever heard of

Show thread

me, being paid $9/hr to find out why Free Card Games Plus crashes if you're running an odd-numbered build of windows during daylight savings in a language with right-to-left text: i love my job

Show thread

For example, one
useful shim is known as HeapPadAllocation; it is applied to programs that
have heap buffer overrun bugs. The shim intercepts calls to the
HeapAllocate function and adds a specified amount to the requested size.
That way, when the program overruns a buffer, it merely corrupts the padding
rather than corrupting the next heap block.

Show thread

windows has code that adds an amount of memory "insulation" to a hardcoded list of shitty programs with buffer overflow errors to ensure that when they corrupt memory, the area they corrupt is unused

i do not envy windows programmers

Show thread

"it merely corrupts the padding", chen calmly states, as my brain disintegrates into fine sand

Show thread

it's bad for the windows team, sure, but think about the people working on wine, who have to independently discover these decades old bugs for themselves and intentionally reimplement them to get poorly written programs to work properly

Show thread

can you break function x when program y is running? program y relies heavily on a bug in the windows 3.0 version of function x

Show thread

q. why does windows do [bizarre action]
a. for compatibility. to answer in more detail, we'll need to discuss a flaw in
:brain1: earlier versions of windows NT
:brain2: pre-NT windows versions
:brain3: MS-DOS before networking support had been added
:brain4: CP/M
:brain5: the discovery of electricity

Show thread

some random guy in the mid seventies: hey how about we do [seemingly good idea with nasty underlying assumptions]
raymond chen, today: and that's why windows reports that it only has 640k of memory if your locale is set to hebrew and the PID of explorer is a prime number during a leap second

Show thread

this seems like a good time to drop another reminder that a windows registry file is called a hive because someone on the windows team had a fear of bees and the person developing the registry was being a jerk

devblogs.microsoft.com/oldnewt

Show thread

adding "give raymond chen a hug and personally apologise to him on behalf of the human race" to my bucket list

Show thread

OCR Output 

@lynnesbian

=~)
Locating items by blind counting

A PROBLEM was reported on a program that tries to be an Explorer clone
with a tree view on the left-hand side showing the folders in the system and a
content viewer on the right-hand side. In the program's toolbar are buttons
that quickly move you to each of the drives in the system. But when you run
the program under Windows 2000, the buttons take you to random folders
instead of to the root of the corresponding drive. What is happening?

Let's say you clicked on the button that says “Go to the C: drive.” The pro-
gram responds by starting at the Desktop folder, navigating to the first item
under the desktop, which it “knows” is the My Computer icon, then navigat-
ing to the third item under My Computer, which it “knows” is your C: drive.

Except that starting in Windows 2000, the order of the icons on the desk-
top changed. My Documents is the first icon on the desktop, and My
Computer moved to the second position. Now, the program goes to the first
item under the Desktop folder and finds My Documents instead of My
Computer. Undaunted, it continues to the third child under My Documents
and concludes that this is your C: drive.

The fix for this was to add an application compatibility flag that forced the
order of items on the Desktop folder to place My Computer first.

@lynnesbian
Why on Earth would you do any of this instead of smooch Lynne directly! :blobheartcat:

@lynnesbian
I will now smooch the Lynne, right on her heckin' adorable face *smooch!*

OCR Output 

@lynnesbian
Image 1:
brevet aiitts CldaosllICU UCLAaAUDSO LALLY UVELEEPOELE LIC VUILICL SIZ,

Another program tried to read the name of the current screen saver from
the system. ini file, but if the screen saver’s name was more than twelve char-
acters long (i.e., longer than 8.3 format), the buffer overflowed. This is why all
the system screen savers in Windows 95 have short filenames.

Another category of problem is reading past the end of a buffer. A crash in

Image 2:

=)
The strangest way of checking for success

I’M Nor Quire sure what the developers were thinking, but there was a multi-
media title that failed to run because of the way the program checked whether
its calls succeeded: Instead of testing the MMRESULT against MMSYSERR_
NOERROR, it asked the multimedia system to convert the error number to a
readable text string and compared the string against “The specified command
complete successfully.” Well, actually, it only checked whether the first sixteen
characters were “The specified co’—I guess somebody doing a code review
decided to do some performance optimization.

Of course, this technique doesn't work very well if the system changes the
precise wording of its error messages or if the end user is running a non-English
version of Windows.

Image 3:

zB
You're always a day away

AFTER YOU INSTALL one particular program, it becomes impossible to
upgrade to Windows XP. Instead, Windows XP Setup keeps reporting that
existing software is not fully installed and that you have to restart the com-
puter to allow it to finish installing. Yet no matter how many times you restart
the computer, the message never goes away.

The reason for the false report is that the program writes itself into the
RunOnce key. Each time it runs, it re-adds itself to the Runonce key. So it
doesn't really run once; rather, it runs all the time, but one run at a time. Since
the RunOnce key is used for programs to finalize their installation, the contin-
uous presence of an entry in the RunOnce key causes Windows XP Setup to
conclude that it was put there by a Setup application that needs to do“one last
thing” to complete the install.

The solution was to teach Windows XP Setup to ignore this particular
program if it appears in the RunOnce key.

Image 4:
—_—=

=<)
Rolling your own version of standard
system functions

WE RECEIVED REPORTS that a popular software development library was failing
to run on Windows 95. Upon closer inspection, we found the reason: The pro-
gram wanted to look at the system configuration file that was responsible for
Windows device drivers, known as system.ini. Instead of using the
Get PrivateProfilestring function to read strings from that file, the pro-
gram opened the file and parsed it manually. Unfortunately, what the authors of
the program failed to take into account was that Get PrivateProfileString
uses a case-insensitive comparison to locate the section. Their version used a
case-sensitive comparison. The result was that the program failed to locate the
[386Enh] section of the configuration file. The fix was to tweak Windows 95
Setup so that it used exactly the capitalization that the library expected.

Thie wacn't the only nracram to try ite hand at narsing the exrateam in: file

@lynnesbian forget debugging, just bundle the thing with a memory expansion pack -- oh we're not talking about Donkey Kong 64 are we

@lynnesbian doesn't ONT cover stuff that's at least as bad, if not worse. i.e. relying on internal functions only exported by ordinal, breaking programs when a new version of whatever lib is released

@lynnesbian or relying on deprecated registry keys from beta dev releases of OSes

@lynnesbian don't forget that program which deleted key ini files if they had any lines longer than 80 chars

@lynnesbian nevermind pointer arithmetic, someone break out the pointer algebra

@lynnesbian I love these threads, please carry on with them!

@lynnesbian That reminds me -- there's a bug that's been in windows since at least 3.0 with the window move in the program menu ( opened with alt+spacebar )

If you select move, the mouse cursor jumps to the middle of the title bar, showing a move icon, but moving the mouse does not move the window, and trying to click drag (which makes sense ) ends the move operation.

One must hit an arrow key before moving with the mouse will actually work.

I've always asked "Why? WHY??" -- and now, thanks to you, i've realized that some ancient Important Third Party Program must have relied on that behaviour and....

@clarjon1 @lynnesbian
😮 I was literally just struggling with this bug yesterday, I have struggled with this bug for years and never known that it was a persistent feature.

I thought something was just wrong with my installation, and that I had certainly used the Move function properly at some point in the distant past.

@68kmentat @lynnesbian

I've just done some testing thanks to pcjs.org/disks/pcx86/windows/2 and that behaviour actually is in 2.0

This behaviour is older than I am.

@clarjon1 @lynnesbian oh my god, I always wondered why I could never get move to move the window

@lynnesbian loading the old windows 3 memory manager for the bits (of programs that use memory they're not supposed to)

@lynnesbian I highly recommend checking out the new old thing blog

@lynnesbian msdn blogs have saved my ass so many times. Really a shame MS deleted most of them recently

@lynnesbian I've tracked down a copy of that PDF for later perusal.

@lynnesbian it is my professional opinion as an electrical engineer that the discovery of electricity was itself a mistake

(i would sign and seal a statement to that effect, but my PE stamp still has my retired name on it)

Show more

@lynnesbian
Make sure you get the right Raymond Chen.
There's more than one at Microsoft.

@hirojin
@Freyaday @lynnesbian
To add to this fun, turns out there's no English Wikipedia page on Raymond Chen, only a Dutch one.

Wild.

Show more
@lynnesbian His latest post ends with "Maybe that’s not something you have to deal with, in which case lucky you" and, oomph

@lynnesbian at this point he could just be making these up and who would ever guess

@lynnesbian Archaeologists of the distant future will reconstruct the late 20th century from Windows backwards compatibility hacks

Horizon spoilers 

@elomatreb
Aloy: So that's why the Faro robots destroyed the world.

Sylens: Quite tragic, indeed.
@lynnesbian

Sign in to participate in the conversation
Lynnestodon

@lynnesbian@fedi.lynnesbian.space's anti-chud pro-skub instance for funtimes