The Old New Thing

Practical development throughout the evolution of Windows.

Latest posts

How do you add or remove a handle from an active <CODE>Msg­Wait­For­Multiple­Objects</CODE>?
Apr 8, 2026
Post comments count 1
Post likes count 1

How do you add or remove a handle from an active Msg­Wait­For­Multiple­Objects?

Raymond Chen

You can't, but you can arrange for the waiter to do it for you.

Were there any Windows 3.1 programs that were so incompatible with Windows 95 that there was no point trying to patch them?
Apr 7, 2026
Post comments count 7
Post likes count 4

Were there any Windows 3.1 programs that were so incompatible with Windows 95 that there was no point trying to patch them?

Raymond Chen

The permanently ineligible list.

Learning to read C++ compiler errors: Illegal use of <TT>-></TT> when there is no <TT>-></TT> in sight
Apr 6, 2026
Post comments count 2
Post likes count 2

Learning to read C++ compiler errors: Illegal use of -> when there is no -> in sight

Raymond Chen

If the compiler is complaining about things you didn't write, find out who wrote them.

How can I use <CODE>Read­Directory­ChangesW</CODE> to know when someone is copying a file out of the directory?
Apr 3, 2026
Post comments count 3
Post likes count 2

How can I use Read­Directory­ChangesW to know when someone is copying a file out of the directory?

Raymond Chen

File copying is not a fundamental operation, nor is it even detectable at the file system layer.

Why doesn’t the system let you declare your own messages to have the same semantics as <CODE>WM_<WBR>COPY­DATA</CODE>?
Apr 2, 2026
Post comments count 0
Post likes count 4

Why doesn’t the system let you declare your own messages to have the same semantics as WM_COPY­DATA?

Raymond Chen

Tempting but misleading.

The cover of <I>C++: The Programming Language</I> raises questions not answered by the cover
Apr 1, 2026
Post comments count 16
Post likes count 14

The cover of C++: The Programming Language raises questions not answered by the cover

Raymond Chen

What are we reading about here?

Before you check if an update caused your problem, check that it wasn’t a problem before the update
Mar 31, 2026
Post comments count 21
Post likes count 4

Before you check if an update caused your problem, check that it wasn’t a problem before the update

Raymond Chen

It was going to be like that when I got here.

A question about the maximimum number of values in a registry key raises questions about the question
Mar 30, 2026
Post comments count 4
Post likes count 3

A question about the maximimum number of values in a registry key raises questions about the question

Raymond Chen

Why is this even a question?

What if a dialog wants to intercept its own message loop?
Mar 27, 2026
Post comments count 1
Post likes count 4

What if a dialog wants to intercept its own message loop?

Raymond Chen

You can steal them from your owner.

Why doesn’t <CODE>WM_<WBR>ENTER­IDLE</CODE> work if the dialog box is a <CODE>Message­Box</CODE>?
Mar 26, 2026
Post comments count 3
Post likes count 3

Why doesn’t WM_ENTER­IDLE work if the dialog box is a Message­Box?

Raymond Chen

Because it opted out.

How can I change a dialog box’s message loop to do a <CODE>Msg­Wait­For­Multiple­Objects</CODE> instead of <CODE>Get­Message</CODE>?
Mar 25, 2026
Post comments count 2
Post likes count 4

How can I change a dialog box’s message loop to do a Msg­Wait­For­Multiple­Objects instead of Get­Message?

Raymond Chen

The dialog box lets you change how it waits.

Windows 95 defenses against installers that overwrite a file with an older version
Mar 24, 2026
Post comments count 6
Post likes count 6

Windows 95 defenses against installers that overwrite a file with an older version

Raymond Chen

A very primitive version of recovery.

How can I make sure the anti-malware software doesn’t terminate my custom service?
Mar 23, 2026
Post comments count 14
Post likes count 3

How can I make sure the anti-malware software doesn’t terminate my custom service?

Raymond Chen

You'll have to ask nicely.

Windows stack limit checking retrospective: arm64, also known as AArch64
Mar 20, 2026
Post comments count 6
Post likes count 2

Windows stack limit checking retrospective: arm64, also known as AArch64

Raymond Chen

Wrapping things up.

Windows stack limit checking retrospective: amd64, also known as x86-64
Mar 19, 2026
Post comments count 8
Post likes count 3

Windows stack limit checking retrospective: amd64, also known as x86-64

Raymond Chen

Reaching the modern day.

Windows stack limit checking retrospective: Alpha AXP
Mar 18, 2026
Post comments count 1
Post likes count 1

Windows stack limit checking retrospective: Alpha AXP

Raymond Chen

Double the size, double the fun.

Windows stack limit checking retrospective: x86-32 also known as i386, second try
Mar 17, 2026
Post comments count 2
Post likes count 4

Windows stack limit checking retrospective: x86-32 also known as i386, second try

Raymond Chen

Appeasing the invisible return address predictor.

Windows stack limit checking retrospective: PowerPC
Mar 16, 2026
Post comments count 0
Post likes count 3

Windows stack limit checking retrospective: PowerPC

Raymond Chen

Doing the math backwards.