The Old New Thing

Practical development throughout the evolution of Windows.

Latest posts

Apr 23, 2026
Post comments count 9
Post likes count 1

Another crash caused by uninstaller code injection into Explorer

Raymond Chen

Inadvertently destroying a staircase while standing on it.

Apr 22, 2026
Post comments count 2
Post likes count 3

Mapping the page tables into memory via the page tables

Raymond Chen

So-called "fractal page mapping".

Apr 21, 2026
Post comments count 28
Post likes count 3

Sure, xor’ing a register with itself is the idiom for zeroing it out, but why not sub?

Raymond Chen

Somehow xor became the most popular version.

Apr 20, 2026
Post comments count 1
Post likes count 3

How did code handle 24-bit-per-pixel formats when using video cards with bank-switched memory?

Raymond Chen

You still have to use aligned accesses, even though the pixels might not be aligned.

Apr 17, 2026
Post comments count 1
Post likes count 4

Forgotten message from the past: LB_INIT­STORAGE

Raymond Chen

Preallocating memory to avoid quadratic behavior.

Apr 16, 2026
Post comments count 9
Post likes count 2

What’s up with window message 0x0091? We’re getting it with unexpected parameters

Raymond Chen

Trespassing on system messages.

Apr 15, 2026
Post comments count 0
Post likes count 2

Why is there a long delay between a thread exiting and the Wait­For­Single­Object returning?

Raymond Chen

Maybe it didn't really exit.

Apr 14, 2026
Post comments count 2
Post likes count 3

Why was there a red telephone at every receptionist desk?

Raymond Chen

Not a direct line to Bill Gates's office.

Apr 13, 2026
Post comments count 8
Post likes count 1

Finding a duplicated item in an array of N integers in the range 1 to N − 1

Raymond Chen

Taking advantage of special characteristics of the array.

Apr 10, 2026
Post comments count 3
Post likes count 2

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

Raymond Chen

Waiting for the waiting thread to acknowledge the change.

Apr 9, 2026
Post comments count 4
Post likes count 2

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

Raymond Chen

You can't, but you can cooperate with the other thread.

Apr 8, 2026
Post comments count 4
Post likes count 2

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.

Apr 7, 2026
Post comments count 9
Post likes count 6

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.

Apr 6, 2026
Post comments count 3
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.

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.

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.

Apr 1, 2026
Post comments count 17
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?

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.

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?

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.

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.

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.

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.

Mar 23, 2026
Post comments count 14
Post likes count 4

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

Raymond Chen

You'll have to ask nicely.

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.

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.

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.

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.

Mar 16, 2026
Post comments count 0
Post likes count 3

Windows stack limit checking retrospective: PowerPC

Raymond Chen

Doing the math backwards.

Mar 13, 2026
Post comments count 4
Post likes count 3

Windows stack limit checking retrospective: MIPS

Raymond Chen

Optimizing out the unnecessary probes comes with its own complexity.

Mar 12, 2026
Post comments count 9
Post likes count 3

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

Raymond Chen

One of the weirdest calling conventions you'll see.

Mar 11, 2026
Post comments count 6
Post likes count 6

How do compilers ensure that large stack allocations do not skip over the guard page?

Raymond Chen

Don't take steps that are too large.

Mar 10, 2026
Post comments count 3
Post likes count 5

A snappy answer when asked about dressing casually at IBM

Raymond Chen

Oh, this old thing?

Mar 9, 2026
Post comments count 8
Post likes count 2

The fine print giveth and the bold print taketh away: The countdown timer

Raymond Chen

Think fast, no pressure.

Mar 9, 2026
Post comments count 2
Post likes count 2

Learning to read C++ compiler errors: Ambiguous overloaded operator

Raymond Chen

Look for the conflicting definitions to see where they are coming from.

Mar 6, 2026
Post comments count 11
Post likes count 2

When Read­Directory­ChangesW reports that a deletion occurred, how can I learn more about the deleted thing?

Raymond Chen

It's already gone. If you need more information, you should have been remembering it.

Mar 5, 2026
Post comments count 2
Post likes count 2

The mystery of the posted message that was dispatched before reaching the main message loop

Raymond Chen

Perhaps it's because you dispatched it.

Mar 4, 2026
Post comments count 6
Post likes count 2

Aha, I found a counterexample to the documentation that says that Query­Performance­Counter never fails

Raymond Chen

Of course, anything can happen if you break the rules.

Mar 3, 2026
Post comments count 18
Post likes count 2

Just for fun: A survey of write protect notches on floppy disks and other media

Raymond Chen

Just some useless trivia.

Mar 2, 2026
Post comments count 3
Post likes count 1

What sort of horrible things happen if my dialog has a non-button with the control ID of IDCANCEL?

Raymond Chen

You get notifications that might not make sense.

Feb 27, 2026
Post comments count 3
Post likes count 2

Intercepting messages inside Is­Dialog­Message, fine-tuning the message filter

Raymond Chen

Making sure it triggers when you need it, and not when you don't.

Feb 26, 2026
Post comments count 1
Post likes count 2

Intercepting messages inside Is­Dialog­Message, installing the message filter

Raymond Chen

Using an <CODE>Is­Dialog­Message</CODE> extension point.

Feb 25, 2026
Post comments count 4
Post likes count 1

Intercepting messages before Is­Dialog­Message can process them

Raymond Chen

Process the message before you let <CODE>Is­Dialog­Message</CODE> see it.

Feb 24, 2026
Post comments count 2
Post likes count 2

Customizing the ways the dialog manager dismisses itself: Isolating the Close pathway

Raymond Chen

Intercepting the flow in your message loop.

Feb 23, 2026
Post comments count 0
Post likes count 2

Customizing the ways the dialog manager dismisses itself: Detecting the ESC key, second (failed) attempt

Raymond Chen

Sniffing the synchronous keyboard state is still not precise enough.

Feb 20, 2026
Post comments count 0
Post likes count 0

The 2026/2027 Seattle Symphony subscription season at a glance

Raymond Chen

The pocket reference guide for 2026/2027.

Feb 20, 2026
Post comments count 12
Post likes count 3

Customizing the ways the dialog manager dismisses itself: Detecting the ESC key, first (failed) attempt

Raymond Chen

Sniffing the asynchronous keyboard state.

Feb 19, 2026
Post comments count 1
Post likes count 6

Exploring the signals the dialog manager uses for dismissing a dialog

Raymond Chen

Summarizing the flow.

Feb 18, 2026
Post comments count 3
Post likes count 2

Could Write­Process­Memory be made faster by avoiding the intermediate buffer?

Raymond Chen

I guess it could, but why bother?

Feb 17, 2026
Post comments count 8
Post likes count 2

Microspeak: Escrow

Raymond Chen

Final build, final, final, final 2, ship this one.

Feb 16, 2026
Post comments count 10
Post likes count 2

It rather involved being on the other side of the airtight hatchway: Tricking(?) a program into reading files

Raymond Chen

Is it really a trick when reading the file is the purpose of the program?

Feb 13, 2026
Post comments count 10
Post likes count 4

How can I distinguish between the numeric keypad 0 and the top-row 0 in the WM_CHAR message?

Raymond Chen

See if it matches the scan code.

Feb 12, 2026
Post comments count 2
Post likes count 3

How can I distinguish between the numeric keypad 0 and the top-row 0 in the WM_KEY­DOWN message?

Raymond Chen

Check whether it is an extended key.

Feb 11, 2026
Post comments count 0
Post likes count 4

How do I suppress the hover effects when I put a Win32 common controls ListView in single-click mode?

Raymond Chen

You can prevent the item from becoming hot-tracked.

Feb 10, 2026
Post comments count 11
Post likes count 6

How did Windows 95 get permission to put the Weezer video Buddy Holly on the CD?

Raymond Chen

Asking nicely, and asking a lot of people.

Feb 9, 2026
Post comments count 3
Post likes count 3

What should I do if a wait call reports WAIT_ABANDONED?

Raymond Chen

It's your one chance to make amends.

Feb 6, 2026
Post comments count 1
Post likes count 3

How can I prevent the user from changing the widths of ListView columns in version 5 of the common controls?, part 2

Raymond Chen

Preventing the resize cursor from appearing.

Feb 5, 2026
Post comments count 6
Post likes count 2

How can I prevent the user from changing the widths of ListView columns in version 5 of the common controls?

Raymond Chen

Deny changes to the width.

Feb 4, 2026
Post comments count 2
Post likes count 1

Super Bowl LX creates an opportunity for symphonic friendly wagering

Raymond Chen

Betting classical music.

Feb 4, 2026
Post comments count 3
Post likes count 2

How can I prevent the user from changing the widths of ListView columns?

Raymond Chen

You can ask the header to be non-resizing.

Feb 3, 2026
Post comments count 0
Post likes count 8

Some small stories about the giant satellite dish antenna that was behind Microsoft Building 11

Raymond Chen

A little trivia.

Feb 2, 2026
Post comments count 5
Post likes count 2

Studying compiler error messages closely: Input file paths

Raymond Chen

Are you even compiling the correct file?

Jan 30, 2026
Post comments count 1
Post likes count 1

Why not store the SAFEARRAY reference count as a hidden allocation next to the SAFEARRAY?

Raymond Chen

The case of "Bring your own <CODE>SAFEARRAY</CODE>."

Jan 29, 2026
Post comments count 1
Post likes count 2

How can I retain access to the data in a SAFEARRAY after my method returns?

Raymond Chen

Find a way to take ownership.

Jan 28, 2026
Post comments count 0
Post likes count 1

Why did I lose the data even though I called Safe­Array­Add­Ref?

Raymond Chen

You have to use the original pointer, but even that won't be good enough.

Jan 27, 2026
Post comments count 2
Post likes count 2

A digression on the design and implementation of Safe­Array­Add­Ref and extending APIs in general

Raymond Chen

The concerns when adding a feature to an existing API.

Jan 26, 2026
Post comments count 0
Post likes count 3

What’s the difference between Safe­Array­Access­Data and Safe­Array­Add­Ref?

Raymond Chen

Two ways of preserving the data.

Jan 23, 2026
Post comments count 15
Post likes count 6

C++ has scope_exit for running code at scope exit. C# says “We have scope_exit at home.”

Raymond Chen

You can wrap it in an <CODE>IDisposable</CODE>.

Jan 22, 2026
Post comments count 6
Post likes count 3

A simple helper function for attaching a progress handler to a Windows Runtime IAsync­Action­With­Progress or IAsync­Operation­With­Progress

Raymond Chen

It doesn't do much, but it saves typing.

Jan 21, 2026
Post comments count 2
Post likes count 2

On the proper usage of a custom Win32 dialog class

Raymond Chen

You are replacing the window procedure, not the dialog procedure.

Jan 20, 2026
Post comments count 5
Post likes count 2

Microspeak: On fire, putting out fires

Raymond Chen

Dealing with emergencies.

Jan 19, 2026
Post comments count 8
Post likes count 7

What was the secret sauce that allows for a faster restart of Windows 95 if you hold the shift key?

Raymond Chen

An old flag from 16-bit Windows.

Jan 16, 2026
Post comments count 1
Post likes count 2

How can I get the tab index number from a dialog box control?

Raymond Chen

The tab index number is an authoring concept, not a runtime concept.

Jan 15, 2026
Post comments count 26
Post likes count 4

When programs assume that the system will never change, episode 4: Stealing strings

Raymond Chen

The strings are an implementation detail.

Jan 14, 2026
Post comments count 0
Post likes count 1

Clipping the focus item when looking for its on-screen location, part 3

Raymond Chen

Finding <I>all</I> the clipping parents.

Jan 13, 2026
Post comments count 1
Post likes count 2

Clipping the focus item when looking for its on-screen location, part 2

Raymond Chen

Finding the correct clipping parent.

Jan 12, 2026
Post comments count 0
Post likes count 2

Clipping the focus item when looking for its on-screen location

Raymond Chen

Preventing the cursor from pointing to nothing.

Jan 9, 2026
Post comments count 1
Post likes count 1

Using Active Accessibility to find out where the focus item is

Raymond Chen

Looking at child objects.

Jan 8, 2026
Post comments count 4
Post likes count 2

Using Active Accessibility to find out where the Windows caret is

Raymond Chen

It's old and rather simple, but we like simple.

Jan 7, 2026
Post comments count 1
Post likes count 1

How can I find out where the Windows caret is?

Raymond Chen

You'll have go to a larger scope.

Jan 6, 2026
Post comments count 1
Post likes count 2

Swapping two blocks of memory that reside inside a larger block, in constant memory, refinement

Raymond Chen

Could do with a little less rotating.

Jan 5, 2026
Post comments count 1
Post likes count 3

How can you swap two non-adjacent blocks of memory using only forward iterators?

Raymond Chen

Applying the rotation trick to our new problem.

Jan 2, 2026
Post comments count 0
Post likes count 2

How can you swap two adjacent blocks of memory using only forward iterators?

Raymond Chen

A different algorithm, employing a different kind of cleverness.

Jan 1, 2026
Post comments count 10
Post likes count 2

Swapping two blocks of memory that reside inside a larger block, in constant memory

Raymond Chen

A variation on the constant-memory rotation.

Dec 31, 2025
Post comments count 5
Post likes count 2

2025 year-end link clearance

Raymond Chen

Another year gets relegated to history.

Dec 31, 2025
Post comments count 1
Post likes count 2

Understanding and mitigating a stack overflow in our task sequencer

Raymond Chen

The recurring problem of synchronous resumption.

Dec 30, 2025
Post comments count 6
Post likes count 3

Additional notes on color-keyed overlays as a way of doing smooth video rendering

Raymond Chen

Choosing the color-key and other brief discussions.

Dec 29, 2025
Post comments count 3
Post likes count 2

The Gävle Goat (Gävlebocken) succumbs in 2025 to a new menace

Raymond Chen

You could blow me over.

Dec 29, 2025
Post comments count 3
Post likes count 2

How can I detect that the system is running low on memory? Or that my job is running low on memory?

Raymond Chen

You can register for a memory notification.

Dec 26, 2025
Post comments count 7
Post likes count 4

Why are we worried about memory access semantics? Full barriers should be enough for anybody

Raymond Chen

You have to find new ways of going faster.

Dec 25, 2025
Post comments count 4
Post likes count 3

Reading the fine print, episode 4: Holiday promotions

Raymond Chen

Checking those validity dates.

Dec 25, 2025
Post comments count 0
Post likes count 3

Why is the last letter of my string not making it to the clipboard?

Raymond Chen

The struggle for null termination.

Dec 24, 2025
Post comments count 1
Post likes count 5

Why does my Ctrl+M accelerator key activate when I press the Enter key?

Raymond Chen

Understanding the difference between keys and characters for accelerators.

Dec 23, 2025
Post comments count 4
Post likes count 5

When irate product support customers demand to speak to Bill Gates

Raymond Chen

So transfer them to his office, or so it seems.

Dec 22, 2025
Post comments count 27
Post likes count 9

All the other cool languages have tryfinally. C++ says “We have tryfinally at home.”

Raymond Chen

The destructor serves as the "finally".

Dec 19, 2025
Post comments count 9
Post likes count 3

A shortcut gives me a weird path for a program shortcut that doesn’t point to the executable, so what is it?

Raymond Chen

It's a placeholder because the shortcut is to an MSI application.

Dec 18, 2025
Post comments count 10
Post likes count 4

Concluding thoughts on our deep dive into Windows clipboard text conversion

Raymond Chen

Stick to Unicode and you'll be fine.

Dec 17, 2025
Post comments count 3
Post likes count 4

Deducing the consequences of Windows clipboard text formats on UTF-8

Raymond Chen

Working out the implications.

Dec 16, 2025
Post comments count 3
Post likes count 2

Why is the Windows clipboard taking the scenic route when converting from CF_TEXT to CF_OEM­TEXT?

Raymond Chen

Something is forcing it down an alternate path.

Dec 15, 2025
Post comments count 3
Post likes count 1

Misunderstanding what the Cricket Celebration Bowl is

Raymond Chen

Apparently, not a bowl of crickets.

Dec 15, 2025
Post comments count 1
Post likes count 4

The Windows clipboard automatic text conversion algorithm is path-dependent

Raymond Chen

When the journey is not half of the fun.

Dec 12, 2025
Post comments count 8
Post likes count 3

Resolving an ambiguity in the Windows clipboard automated text conversion table

Raymond Chen

Who goes first?

Dec 11, 2025
Post comments count 11
Post likes count 3

Studying the various locale mismatch scenarios in Windows clipboard text format synthesis

Raymond Chen

If they don't match, then the 8-bit strings are basically broken already.

Dec 10, 2025
Post comments count 1
Post likes count 1

How does Windows synthesize the CF_LOCALE clipboard format?

Raymond Chen

Getting it from a place that might have been obvious in the past, but maybe not today.

Dec 9, 2025
Post comments count 2
Post likes count 2

How does Windows synthesize CF_UNICODE­TEXT from CF_TEXT and vice versa?

Raymond Chen

Let's ask the locale.

Dec 8, 2025
Post comments count 11
Post likes count 3

How does Windows synthesize CF_OEM­TEXT from CF_TEXT and vice versa?

Raymond Chen

Starting with the easy case, or at least it looks easy.

Dec 5, 2025
Post comments count 11
Post likes count 3

How can my process read its own standard output?

Raymond Chen

You'll have to trick yourself before anybody notices, which may not be possible.

Dec 4, 2025
Post comments count 5
Post likes count 1

How can I read the standard output of an already-running process?

Raymond Chen

You can't. You'll have to do it before the process starts.

Dec 3, 2025
Post comments count 6
Post likes count 5

How do I check whether the user has permission to create files in a directory?

Raymond Chen

Request the directory security attributes that correspond to your proposed operation.

Dec 2, 2025
Post comments count 3
Post likes count 2

Microspeak: Big rocks

Raymond Chen

The large obstacles.

Dec 1, 2025
Post comments count 0
Post likes count 2

How do I get my edit control text to be autoselected when I choose it to be the default focus in my dialog?

Raymond Chen

Remembering some old APIs.

Nov 28, 2025
Post comments count 8
Post likes count 5

How can I have a Win32 drop-down combo box with a read-only edit control?

Raymond Chen

You can ask for its handle and mark it read-only.

Nov 27, 2025
Post comments count 3
Post likes count 5

Message-only windows are for messaging, not as a convenient victim for hosting UI

Raymond Chen

If you want to host UI, use a real window (possibly hidden).

Nov 26, 2025
Post comments count 9
Post likes count 2

At what point in the Windows development cycle is it too late to change the text of a translatable string?

Raymond Chen

The translation team sets the deadline.

Nov 25, 2025
Post comments count 7
Post likes count 5

The apocryphal origins of the Hot Dog Stand color scheme

Raymond Chen

Challenge accepted.

Nov 24, 2025
Post comments count 5
Post likes count 4

Why does XAML break down when I have an element that is half a billion pixels tall?

Raymond Chen

You've far exceeded the design goals and have even exceeded the expressive ability of a float.

Nov 21, 2025
Post comments count 6
Post likes count 2

Maybe somebody can explain to me how weak references solve the ODR problem

Raymond Chen

I don't see it.

Nov 20, 2025
Post comments count 11
Post likes count 3

In the commit-on-demand pattern, what happens if an access violation straddles multiple pages?

Raymond Chen

The access violation exceptions will continue until commit improves.

Nov 19, 2025
Post comments count 3
Post likes count 8

Is Write­Process­Memory faster than shared memory for transferring data between two processes?

Raymond Chen

Shared memory is the copy-free solution.

Nov 18, 2025
Post comments count 1
Post likes count 5

Microspeak: Little-r

Raymond Chen

Harkening back to a very old mail program.

Nov 17, 2025
Post comments count 21
Post likes count 3

How can I detect that Windows is running in S-Mode, redux

Raymond Chen

Doing it on hard mode.

Nov 14, 2025
Post comments count 9
Post likes count 3

I can use WM_COPYDATA to send a block of data to another window, but how does it send data back?

Raymond Chen

They can send it back with their own <CODE>WM_<WBR>COPY­DATA</CODE> message, or they can put it in an agreed-upon shared location.

Nov 13, 2025
Post comments count 4
Post likes count 2

Could we use CTAD to simplify the use of WRL’s Callback function?

Raymond Chen

Not directly, but maybe indirectly.

Nov 12, 2025
Post comments count 5
Post likes count 6

Non-recursively deleting a binary tree in constant space: Rotating the tree

Raymond Chen

Preserving in-order while linearizing.

Nov 11, 2025
Post comments count 7
Post likes count 5

Behind the scenes on how Windows 95 application compatibility patched broken programs

Raymond Chen

Replacing bytes with the greatest of care.

Nov 10, 2025
Post comments count 0
Post likes count 2

How did Windows 3.1 distinguish two different programs that happened to share the same executable name?

Raymond Chen

The trouble with disambiguation.

Nov 7, 2025
Post comments count 3
Post likes count 1

Non-recursively deleting a binary tree in constant space: Restructuring the tree

Raymond Chen

Changing the tree structure to make it easier to delete.

Nov 6, 2025
Post comments count 3
Post likes count 1

Non-recursively deleting a binary tree in constant space: Synthesizing the parent pointer

Raymond Chen

Making one as you go.

Nov 5, 2025
Post comments count 11
Post likes count 2

Non-recursively deleting a binary tree in constant space: Traversal with parent pointers

Raymond Chen

First assume that you have a parent pointer.

Nov 4, 2025
Post comments count 4
Post likes count 3

The Microsoft SoftCard for the Apple II: Getting two processors to share the same memory

Raymond Chen

Reportedly Microsoft's first hardware product.

Nov 3, 2025
Post comments count 3
Post likes count 2

Why does SHFormat­Date­Time take an unaligned FILETIME?

Raymond Chen

Designed for its original use case.

Oct 31, 2025
Post comments count 4
Post likes count 1

Microspeak: turn into a pumpkin

Raymond Chen

To disappear, such as for the year-end holidays.

Oct 30, 2025
Post comments count 8
Post likes count 3

Trying to build a XAML tree in code throws a “No installed components were detected” exception

Raymond Chen

An unfortunate error code collision, but the explanatory text leads the way.

Oct 29, 2025
Post comments count 2
Post likes count 2

What to do when you have a crash in the runtime control flow guard check

Raymond Chen

You don't have to understand it, but you should be able to extract data from it.

Oct 28, 2025
Post comments count 18
Post likes count 10

How did the Windows 95 user interface code get brought to the Windows NT code base?

Raymond Chen

Ported bit by bit.

Oct 27, 2025
Post comments count 11
Post likes count 5

Dubious security vulnerability: Denial of service by loading a very large file

Raymond Chen

I mean, it's what you asked it to do.

Oct 24, 2025
Post comments count 0
Post likes count 2

The early history of the Windows Runtime PropertyValue and why there is a PropertyType.Inspectable that is never used

Raymond Chen

It used to be there because PropertyValue started out as the fundamental variant type before shifting focus to being the fundamental boxed type.

Oct 23, 2025
Post comments count 0
Post likes count 3

Windows Runtime design principle: Properties can be set in any order

Raymond Chen

If all you're doing is setting properties, you can do it any way you like.

Oct 22, 2025
Post comments count 7
Post likes count 3

What makes cheap_steady_clock faster than std::chrono::high_resolution_clock?

Raymond Chen

It's quite a bit faster, though maybe you don't care.

Oct 21, 2025
Post comments count 1
Post likes count 2

Microspeak: The hockey stick on wheels

Raymond Chen

You're always a year away.

Oct 20, 2025
Post comments count 15
Post likes count 6

What about the icons in pifmgr.dll?

Raymond Chen

Just for fun.

Oct 17, 2025
Post comments count 2
Post likes count 2

Using RAII to remedy a defect where not all code paths performed required exit actions, follow-up

Raymond Chen

If the callback requires copyability.

Oct 16, 2025
Post comments count 9
Post likes count 5

Using RAII to remedy a defect where not all code paths performed required exit actions

Raymond Chen

Passing the obligation onward.

Oct 15, 2025
Post comments count 10
Post likes count 4

Why can you increment a reference count with relaxed semantics, but you have to decrement with release semantics?

Raymond Chen

It's more important to clean up when you leave.

Oct 14, 2025
Post comments count 12
Post likes count 6

I remember taking a screen shot of a video, and when I opened it in Paint, the video was playing in it! What witchcraft is this?

Raymond Chen

You copied the green screen.

Oct 13, 2025
Post comments count 4
Post likes count 3

API design principle: Don’t tempt people to divide by zero

Raymond Chen

Remove it from the equation.

Oct 10, 2025
Post comments count 5
Post likes count 2

The self-assignment principle for Windows Runtime properties: Don’t change behavior based on whether a property has been written to

Raymond Chen

The fact that a property has been set does not by itself trigger functionality.

Oct 9, 2025
Post comments count 4
Post likes count 2

The self-assignment principle for Windows Runtime properties applies to default values

Raymond Chen

The default value must be legal.

Oct 8, 2025
Post comments count 7
Post likes count 2

Windows Runtime API design principles around read-write properties: Idempotence and self-assignment

Raymond Chen

Setting it to the value it already has is not a crime.

Oct 7, 2025
Post comments count 6
Post likes count 2

Remembering the end of support for VRML in Internet Explorer

Raymond Chen

No one left standing.

Oct 6, 2025
Post comments count 10
Post likes count 3

Code comments should apply to the state of the system at the point the comment “executes”

Raymond Chen

Putting them in the flow.

Oct 3, 2025
Post comments count 2
Post likes count 2

Can we get weak functions for static linking? The Visual C++ compiler says “We have weak functions at home”

Raymond Chen

It's already there, just under a different paradigm.

Oct 2, 2025
Post comments count 0
Post likes count 1

The problem with inferring from a function call operator is that there may be more than one

Raymond Chen

<CODE>auto</CODE> parameters make this easy to write, particularly for lambdas.

Oct 1, 2025
Post comments count 1
Post likes count 3

How do I convert a FILETIME to a C++ clock like std::system_clock or winrt::clock?

Raymond Chen

The <CODE>winrt::clock</CODE> has a conversion for you.

Sep 30, 2025
Post comments count 9
Post likes count 1

Microspeak: Convicted

Raymond Chen

False backformation.

Sep 29, 2025
Post comments count 1
Post likes count 3

How can I enumerate the overflow icons in the Notification Area without showing them?

Raymond Chen

If they aren't shown, then they aren't automatable, so there's no requirement that they exist in the UI automation tree.

Sep 26, 2025
Post comments count 9
Post likes count 6

Why didn’t Windows 95 setup install a miniature Windows 95 so that it could be written as a 32-bit program?

Raymond Chen

Getting to the GUI quickly, and rebooting only once.

Sep 25, 2025
Post comments count 8
Post likes count 4

Samples note: Use comments to describe what code does, not what you wish the code would do

Raymond Chen

Comments explain the code. They are not substitutes for the code.

Sep 24, 2025
Post comments count 13
Post likes count 8

Why is Windows still tinkering with critical sections?

Raymond Chen

The critical section may be an old dog, but it's still learning new tricks.

Sep 23, 2025
Post comments count 2
Post likes count 1

Another lesson learned from the Windows 98 on-stage USB blue screen

Raymond Chen

Test before using.

Sep 22, 2025
Post comments count 11
Post likes count 4

Why was Windows 3.0’s WinHelp called an online help system when it ran offline?

Raymond Chen

It was online in a different sense.

Sep 19, 2025
Post comments count 1
Post likes count 1

Learning to read C++ compiler errors: Not a legal base class

Raymond Chen

What would make it an illegal base class?

Sep 18, 2025
Post comments count 6
Post likes count 2

Can I close a duplicate handle while I’m waiting on the original?

Raymond Chen

That's fine, since you're not closing the handle that you're waiting on.

Sep 17, 2025
Post comments count 1
Post likes count 2

How can I get my shell thumbnail extractors to run in the same process?

Raymond Chen

Adding another level of indirection.

Sep 16, 2025
Post comments count 7
Post likes count 3

Translating the STATUS_STACK_BUFFER_OVERRUN status code into customer-ready text

Raymond Chen

Reducing the level of alarm.

Sep 15, 2025
Post comments count 14
Post likes count 9

Why is the name of the Microsoft Wireless Notebook Presenter Mouse 8000 hard-coded into the Bluetooth drivers?

Raymond Chen

Is it some sort of favoritism?

Sep 12, 2025
Post comments count 4
Post likes count 5

How can I convert a third party in-process server so it runs in the COM surrogate?

Raymond Chen

You can put your own object in the surrogate first.

Sep 11, 2025
Post comments count 4
Post likes count 1

Why can’t std::apply figure out which overload I intend to use? Only one of then will work!

Raymond Chen

The overload resolution happens before the compiler knows what it's going to be used for.

Sep 10, 2025
Post comments count 7
Post likes count 3

The documentation says that CompanyName version information is required, but my program seems to work without it, so how required is it?

Raymond Chen

It's more of a "Very strongly recommended" than a "Required".

Sep 9, 2025
Post comments count 11
Post likes count 3

A suggestion to people who assign nicknames to meeting rooms

Raymond Chen

Lean into the pattern. Don't try to cross it up.

Sep 8, 2025
Post comments count 15
Post likes count 1

Why didn’t Windows 95 simply special-case the laptops that locked up when it executed the HLT instruction?

Raymond Chen

The catastrophic risk of bricking a computer.

Sep 5, 2025
Post comments count 2
Post likes count 1

The case of the crash on a null pointer even though we checked it for null

Raymond Chen

Understanding what you're checking.

Sep 4, 2025
Post comments count 1
Post likes count 3

How can I write a C++/WinRT IAsyncOperation<T> where T is not a Windows Runtime type?, part 2

Raymond Chen

Safer smuggling.

Sep 3, 2025
Post comments count 1
Post likes count 3

How can I write a C++/WinRT IAsyncOperation<T> where T is not a Windows Runtime type?, part 1

Raymond Chen

It's not representable in the Windows Runtime, but you can smuggle it.

Sep 2, 2025
Post comments count 7
Post likes count 1

Dubious security vulnerability: Remembering passwords for recently-opened ZIP files

Raymond Chen

If it didn't remember them, you wouldn't like it.

Sep 1, 2025
Post comments count 4
Post likes count 1

Thoughts on creating a tracking pointer class, part 16: Second attempt to use a list

Raymond Chen

We can splice nodes to move them between lists.

Aug 29, 2025
Post comments count 2
Post likes count 1

Thoughts on creating a tracking pointer class, part 15: A custom shared pointer

Raymond Chen

Simplifying it for out limited use case.

Aug 28, 2025
Post comments count 2
Post likes count 1

Thoughts on creating a tracking pointer class, part 14: Nonthrowing moves with the shared tracking pointer

Raymond Chen

Moving the exception somewhere else.

Aug 27, 2025
Post comments count 0
Post likes count 1

Thoughts on creating a tracking pointer class, part 13: Restoring the strong exception guarantee

Raymond Chen

Don't commit to anything until you know you can finish the job.

Aug 26, 2025
Post comments count 0
Post likes count 1

Thoughts on creating a tracking pointer class, part 12: A shared tracking pointer

Raymond Chen

Sharing a single tracking pointer among all instances.

Aug 25, 2025
Post comments count 0
Post likes count 1

Thoughts on creating a tracking pointer class, part 11: Repairing assignment

Raymond Chen

Restoring things that were automatically deleted.

Aug 22, 2025
Post comments count 0
Post likes count 1

Thoughts on creating a tracking pointer class, part 10: Proper conversion

Raymond Chen

Making sure you cannot remove qualifiers.

Aug 21, 2025
Post comments count 0
Post likes count 1

Thoughts on creating a tracking pointer class, part 9: Conversion

Raymond Chen

Making a read-only tracking pointer from a read-write tracking pointer.

Aug 20, 2025
Post comments count 1
Post likes count 1

Thoughts on creating a tracking pointer class, part 8: Tracking const objects

Raymond Chen

Making tracking pointers to const objects.

Aug 19, 2025
Post comments count 1
Post likes count 1

Thoughts on creating a tracking pointer class, part 7: Non-modifying trackers, second try

Raymond Chen

Another attempt to make tracking pointers to objects that you can't modify.

Aug 18, 2025
Post comments count 0
Post likes count 1

Thoughts on creating a tracking pointer class, part 6: Non-modifying trackers

Raymond Chen

Making tracking pointers to objects that you can't modify.

Aug 15, 2025
Post comments count 2
Post likes count 2

Thoughts on creating a tracking pointer class, part 5: Copying our tracking pointer

Raymond Chen

How to copy from a const tracking pointer.

Aug 14, 2025
Post comments count 0
Post likes count 2

Thoughts on creating a tracking pointer class, part 4: Using a circular doubly linked list

Raymond Chen

Building our own circular doubly-linked list.

Aug 13, 2025
Post comments count 0
Post likes count 2

Thoughts on creating a tracking pointer class, part 3: Using a std::vector

Raymond Chen

Tracking your trackers with a vector.

Aug 12, 2025
Post comments count 3
Post likes count 2

Thoughts on creating a tracking pointer class, part 2: Using a std::list

Raymond Chen

Tracking your trackers with a <CODE>std::list</CODE>.

Aug 11, 2025
Post comments count 1
Post likes count 3

Thoughts on creating a tracking pointer class, part 1: Concept art

Raymond Chen

Following an object as it moves.

Aug 8, 2025
Post comments count 7
Post likes count 4

Under what conditions could a Read­File or Write­File fail to transfer all of the bytes, and how do I detect that?

Raymond Chen

If there is not enough data to read, or not room to write.

Aug 7, 2025
Post comments count 11
Post likes count 4

How can I detect that Windows is running in S-Mode?

Raymond Chen

Check the code integrity policy.

Aug 6, 2025
Post comments count 9
Post likes count 5

How do I disable pieces of the property sheet for a service in the Services MMC snap-in?

Raymond Chen

There's no secret setting. It's all based on access control.

Aug 5, 2025
Post comments count 24
Post likes count 5

Why are Windows semiannual updates named H1 and H2?

Raymond Chen

To address an unconscious bias.

Aug 4, 2025
Post comments count 24
Post likes count 3

How can I read more than 4GB of data from a file in a single call to Read­File?

Raymond Chen

You can't, but you can try to fake it.

Aug 1, 2025
Post comments count 2
Post likes count 1

Two related questions about keeping track of PIDs of IPC clients

Raymond Chen

Since you're doing IPC, you may as well let IPC do the work for you.

Jul 31, 2025
Post comments count 7
Post likes count 1

A consequence of the weird wReserved value at the start of the DECIMAL structure

Raymond Chen

It overwrites things by accident.

Jul 30, 2025
Post comments count 2
Post likes count 1

In C++/WinRT, how can I await multiple coroutines and capture the results?, part 0

Raymond Chen

If you don't really care about what happens if something goes wrong.

Jul 29, 2025
Post comments count 16
Post likes count 5

Why is there a window with no name blocking Windows shutdown?

Raymond Chen

They never expected you to see it.

Jul 28, 2025
Post comments count 2
Post likes count 3

API design note: Don’t make up multiple names for the same thing

Raymond Chen

It may be obvious to you, but that's because you wrote it.

Jul 25, 2025
Post comments count 0
Post likes count 3

How can I confirm in the Windows debugger that I’m looking at a COMDAT-folded function?

Raymond Chen

Ask for all the names for an address.

Jul 24, 2025
Post comments count 6
Post likes count 3

How can I wait until a named object (say a mutex) is created?

Raymond Chen

You can't, but maybe you can wait for something else.

Jul 23, 2025
Post comments count 6
Post likes count 1

Exploring possible solutions to the inconsistency in how Windows searches case-insensitively for named resources

Raymond Chen

Maintaining compatibility while addressing flaws.

Jul 22, 2025
Post comments count 2
Post likes count 2

Being more adamant about reporting that C++/WinRT was unable to resume execution on a dispatcher thread

Raymond Chen

Better versions in a different box.

Jul 21, 2025
Post comments count 1
Post likes count 4

What happens if C++/WinRT is unable to resume execution on a dispatcher thread?

Raymond Chen

What you get out of the box.

Jul 18, 2025
Post comments count 20
Post likes count 4

The case of the invalid instruction exception on an instruction that should never have executed

Raymond Chen

I don't recall ever asking you to do that.

Jul 17, 2025
Post comments count 0
Post likes count 3

If the Window Runtime PropertyValue is for boxing non-inspectables, why is there a PropertyValue.CreateInspectable?

Raymond Chen

For completeness, but not for functionality.

Jul 16, 2025
Post comments count 5
Post likes count 5

The Fundamental Failure-Mode Theorem: Systems lie about their proper functioning

Raymond Chen

It doesn't say what it does on the tin.

Jul 15, 2025
Post comments count 0
Post likes count 5

Perhaps not a recommended usage for an emergency power outlet

Raymond Chen

Maybe that's not a critical system.

Jul 14, 2025
Post comments count 5
Post likes count 5

There is a std::chrono::high_resolution_clock, but no low_resolution_clock

Raymond Chen

For when you care only enough to be roughly on time.

Jul 11, 2025
Post comments count 3
Post likes count 4

Detecting and reporting all unhandled C++ exceptions as well as all unhandled structured exceptions

Raymond Chen

Closing another exit point.

Jul 10, 2025
Post comments count 7
Post likes count 3

Our first attempt to detect and report all unhandled C++ exceptions as well as all unhandled structured exceptions

Raymond Chen

Identifying and classifying the exit points.

Jul 9, 2025
Post comments count 4
Post likes count 5

When I install an unhandled structured exception filter, why doesn’t std::terminate get called?

Raymond Chen

You're using the same hook that the compiler uses to call <CODE>std::<WBR>terminate</CODE>.

Jul 8, 2025
Post comments count 9
Post likes count 2

A walkthrough of the original Microsoft Building 3

Raymond Chen

Don't get lost on your walk down memory lane.

Jul 7, 2025
Post comments count 2
Post likes count 2

Dubious security vulnerability: If I perform this complex series of manual steps, I can crash a program I am running

Raymond Chen

What security boundary did you cross?

Jul 4, 2025
Post comments count 4
Post likes count 1

Why doesn’t LVIF_INDENT work without an image list?

Raymond Chen

Its original client had an image list.

Jul 3, 2025
Post comments count 13
Post likes count 0

German language cheat sheet: On changing quantities

Raymond Chen

How much there is, and how is it changing.

Jul 3, 2025
Post comments count 0
Post likes count 2

If the Format­Message function fails, and I requested that it allocate a buffer, do I have to free the buffer?

Raymond Chen

There was no buffer returned, so there's nothing to free anyway.

Jul 2, 2025
Post comments count 1
Post likes count 2

Unintended yet somehow entirely expected consequences of marking a COM interface as local

Raymond Chen

If it's local-only, then it can't be remote.

Jul 1, 2025
Post comments count 0
Post likes count 1

The sizzle reel that says things that nobody understands

Raymond Chen

Failing to understand your audience.

Jun 30, 2025
Post comments count 1
Post likes count 2

2025 mid-year link clearance

Raymond Chen

Halfway there.

Jun 30, 2025
Post comments count 17
Post likes count 3

Embracing the power of the empty set in API design: Requesting zero items

Raymond Chen

It's okay to ask for nothing. You get nothing.

Jun 27, 2025
Post comments count 8
Post likes count 1

Why do I get errors or warnings about some weird symbol called ?main@@YAHP$01E$AAV?$Array@PE$AAVString@Platform…, part 3

Raymond Chen

Forcing <CODE>main</CODE> to be found in the place we want.

Jun 26, 2025
Post comments count 0
Post likes count 1

Why do I get errors about some weird symbol called ?main@@YAHP$01E$AAV?$Array@PE$AAVString@Platform…, part 2

Raymond Chen

Figuring out why C++/CX makes a difference.

Jun 25, 2025
Post comments count 8
Post likes count 4

Your information has been permanently deleted, for small values of permanently

Raymond Chen

Is it really gone?

Jun 25, 2025
Post comments count 1
Post likes count 1

Why do I get errors about some weird symbol called ?main@@YAHP$01E$AAV?$Array@PE$AAVString@Platform…, part 1

Raymond Chen

Welcome to the world of C++/CX. Is "welcome" the right word?

Jun 24, 2025
Post comments count 11
Post likes count 5

Abusing copyright strings to trick software into thinking it’s running on your competitor’s PC

Raymond Chen

I did technically cross my fingers.

Jun 23, 2025
Post comments count 7
Post likes count 6

The MIDL compiler still has trouble with double greater-than signs, sadly

Raymond Chen

Many have tried.

Jun 20, 2025
Post comments count 2
Post likes count 5

The case of the invalid handle error when a handle is closed while a thread is waiting on it

Raymond Chen

You are theorizing one race but experiencing another.

Jun 19, 2025
Post comments count 2
Post likes count 1

Learning to read C++ compiler errors: Ambiguous symbol errors after including a header file

Raymond Chen

Finding out why multiple entities with the same name are visible.

Jun 18, 2025
Post comments count 0
Post likes count 1

You have to tell Get- and Set­Security­Info the object type, you can’t make it guess

Raymond Chen

It needs to know which provider to give it to.

Jun 17, 2025
Post comments count 0
Post likes count 3

Funding the Egghead store shopping spree took a little extra legwork

Raymond Chen

Just ask the boss.

Jun 16, 2025
Post comments count 1
Post likes count 5

Writing a helper class for generating a particular category of C callback wrappers around C++ methods

Raymond Chen

Another exercise in C++ template programming.

Jun 13, 2025
Post comments count 4
Post likes count 3

Thread pool threads are like preschool: Leave things the way you found them

Raymond Chen

Your mother always told you to clean up behind yourself.

Jun 12, 2025
Post comments count 7
Post likes count 1

Why does Windows even have Interlocked functions when we have std::atomic?

Raymond Chen

Well, you have to start somewhere.

Jun 11, 2025
Post comments count 7
Post likes count 4

Removing the MAX_PATH restriction on paths applies only to paths

Raymond Chen

The individual file names still retain their existing limits.

Jun 10, 2025
Post comments count 6
Post likes count 5

Application compatibility for Windows 95 crashed a cash register

Raymond Chen

Exceeding all reasonable maximums.

Jun 9, 2025
Post comments count 2
Post likes count 2

Dubious security vulnerability: Tricking a program into running non-elevated

Raymond Chen

You can do anything, but still within the limits of your authority.

Jun 6, 2025
Post comments count 0
Post likes count 4

Why does C++ think my class is copy-constructible when it can’t be copy-constructed?

Raymond Chen

You said that you had a copy constructor, even though it can't be compiled.

Jun 5, 2025
Post comments count 11
Post likes count 2

Why do some Windows functions fail if I pass an unaligned Unicode string?

Raymond Chen

Well, if you don't align it, then you've already broken the rules.

Jun 4, 2025
Post comments count 2
Post likes count 3

Riffing on a typo in the name of the opera Turandot

Raymond Chen

On the dot.

Jun 4, 2025
Post comments count 0
Post likes count 1

How can I programmatically find the network path by which a folder has been shared?

Raymond Chen

There is no direct query. You'll have to infer it.

Jun 3, 2025
Post comments count 8
Post likes count 6

The symbolism of the magnifying glass is not universal

Raymond Chen

Just making things bigger?

Jun 2, 2025
Post comments count 0
Post likes count 2

Stating the obvious about debugging an invalid parameter error when freeing memory

Raymond Chen

Writing it down for posterity.

May 30, 2025
Post comments count 5
Post likes count 1

Using an oracle to see where your code is producing the wrong output

Raymond Chen

If there is a reference implementation, then use it as a check.

May 29, 2025
Post comments count 6
Post likes count 7

The case of creating new instances when you wanted to use the same one

Raymond Chen

C++ language backward compatibility makes legal what you had hoped wasn't.

May 28, 2025
Post comments count 1
Post likes count 3

How do I convert a WIC bitmap back to a GDI HBITMAP?

Raymond Chen

You can copy the bits into a DIB section.

May 27, 2025
Post comments count 9
Post likes count 4

What was origin of the code name Redpill for Windows 8 feature lockout?

Raymond Chen

Pretty obvious, actually.

May 26, 2025
Post comments count 2
Post likes count 1

Why does Enum­Process­Modules report no modules on a process that was created suspended?

Raymond Chen

There are no modules yet because you didn't give them a chance to load.

May 23, 2025
Post comments count 6
Post likes count 4

How can I detect if one of my helper processes is launching child processes?

Raymond Chen

You can ask a job object to keep track for you.

May 22, 2025
Post comments count 4
Post likes count 3

How can I create a window the size of the screen without it being treated as a fullscreen window?

Raymond Chen

You can declare that you aren't rude.

May 21, 2025
Post comments count 5
Post likes count 3

Silly parlor tricks: Promoting a 32-bit value to a 64-bit value when you don’t care about garbage in the upper bits

Raymond Chen

Inline assembly that doesn't do anything.

May 20, 2025
Post comments count 7
Post likes count 3

Why does Windows report my processor speed twice, with slightly different values?

Raymond Chen

One is calculated. The other is self-promotion.

May 19, 2025
Post comments count 1
Post likes count 2

Secret passages on Microsoft main campus, episode 3

Raymond Chen

Another covered passage between buildings.

May 16, 2025
Post comments count 8
Post likes count 2

What’s with the weird wReserved value at the start of the DECIMAL structure?

Raymond Chen

It's where the discriminant goes when the <CODE>DECIMAL</CODE> is put "inside" a <CODE>VARIANT</CODE>.

May 15, 2025
Post comments count 6
Post likes count 2

How do I force RunOnce commands to run in a specific order?

Raymond Chen

Run them in the desired order yourself.

May 14, 2025
Post comments count 0
Post likes count 2

If I mark my thread pool callback as long-running, does it still count toward the thread pool thread limit?

Raymond Chen

Yes, because it's still in the thread pool.

May 13, 2025
Post comments count 9
Post likes count 3

What is the developer set-up for developing Windows for multiple processor architectures?

Raymond Chen

You usually just pick one and count on your friends for the others.

May 12, 2025
Post comments count 2
Post likes count 2

Dubious security vulnerability: A program does not run correctly if you run it the wrong way, redux

Raymond Chen

Trying to make the system run the program automatically.

May 9, 2025
Post comments count 12
Post likes count 4

How can I wait for Clipboard History to recognize a clipboard change before I change it again?

Raymond Chen

Listen for the change event.

May 8, 2025
Post comments count 6
Post likes count 3

Why doesn’t Clipboard History capture rapid changes to clipboard contents?

Raymond Chen

Clipboard history operates asynchronously, so you are changing it before it can respond to the changes.

May 7, 2025
Post comments count 14
Post likes count 9

What were the MS-DOS programs that the moricons.dll icons were intended for?

Raymond Chen

Tallying them up.

May 6, 2025
Post comments count 7
Post likes count 7

What were the MS-DOS programs that Windows used the progman.exe stock icons for?

Raymond Chen

Mostly generic-looking icons.

May 5, 2025
Post comments count 9
Post likes count 5

What were the intended uses of those icons in moricons.dll?

Raymond Chen

Icons for old MS-DOS apps.

May 2, 2025
Post comments count 4
Post likes count 3

Using type aliasing to avoid the ODR problem with conditional compilation, part 2

Raymond Chen

Ensuring that you pick a side.

May 1, 2025
Post comments count 3
Post likes count 2

Using C++ type aliasing to avoid the ODR problem with conditional compilation, part 1

Raymond Chen

Still one definition, but two types.

Apr 30, 2025
Post comments count 7
Post likes count 4

Why does Windows have trouble finding my Win32 resource if it contains an accented character?

Raymond Chen

Disagreements over the fine print.

Apr 29, 2025
Post comments count 9
Post likes count 3

Protecting Windows users from Janet Jackson’s Rhythm Nation

Raymond Chen

Granting an exception to a system policy.

Apr 28, 2025
Post comments count 14
Post likes count 9

Why did Windows 7, for a few months, log on slower if you have a solid color background?

Raymond Chen

It's waiting for Godot and eventually gives up.

Apr 25, 2025
Post comments count 11
Post likes count 3

If we can have std::atomic<std::shared_ptr>, why not std::atomic<com_ptr>?

Raymond Chen

Controlling the reference count.

Apr 24, 2025
Post comments count 5
Post likes count 3

When I define a window class with no default cursor, what is the explanation for the cursors that appear in my client area?

Raymond Chen

You said you'd take care of it, but you didn't.

Apr 23, 2025
Post comments count 7
Post likes count 3

What resource ID should I give my application’s main icon?

Raymond Chen

Applying what we know about how Explorer finds the "first" icon in a file.

Apr 22, 2025
Post comments count 6
Post likes count 1

Microspeak: top of mind

Raymond Chen

Things I'm thinking about.

Apr 21, 2025
Post comments count 20
Post likes count 1

The ongoing story of seconds on the taskbar

Raymond Chen

The cost of ticking.

Apr 18, 2025
Post comments count 2
Post likes count 1

The case of the feature flag that didn’t stay on long enough, part 2

Raymond Chen

Leaving everything the way you found it.

Apr 17, 2025
Post comments count 3
Post likes count 2

The case of the feature flag that didn’t stay on long enough, part 1

Raymond Chen

Understanding scope and order of destruction.

Apr 16, 2025
Post comments count 0
Post likes count 1

Using the classical model for linking to provide unit test overrides

Raymond Chen

Overriding a LIB with an OBJ for fun and profit.

Apr 15, 2025
Post comments count 16
Post likes count 2

There was a lot of imagined dropping tablets in swimming pools

Raymond Chen

The archetypical example of needing a replacement computer.

Apr 14, 2025
Post comments count 6
Post likes count 2

Dubious security vulnerability: Once I have tricked the user into running a malicious shortcut, I can install malware

Raymond Chen

Yes, that's sort of the point.

Apr 11, 2025
Post comments count 12
Post likes count 5

The case of the UI thread that hung in a kernel call

Raymond Chen

I did tell you not to do that.

Apr 10, 2025
Post comments count 0
Post likes count 1

Function overloading is more flexible (and more convenient) than template function specialization

Raymond Chen

You can change more things in an overload.

Apr 9, 2025
Post comments count 5
Post likes count 1

Why can’t I use SEC_LARGE_PAGES with a file-based file mapping?

Raymond Chen

No paging, no crying.

Apr 8, 2025
Post comments count 10
Post likes count 2

The Goldilocks zone of software stability

Raymond Chen

Not too new, not too old.

Apr 7, 2025
Post comments count 4
Post likes count 3

On priority inversion in the use of a spinlock to ensure atomic access to a shared_ptr

Raymond Chen

Priority inversion may be rare, but correctness doesn't care about rarity.

Apr 4, 2025
Post comments count 5
Post likes count 2

Adding delays to our task sequencer, part 3

Raymond Chen

Waiting more cheaply.

Apr 3, 2025
Post comments count 0
Post likes count 2

Adding delays to our task sequencer, part 2

Raymond Chen

Waiting the right amount of time.

Apr 2, 2025
Post comments count 0
Post likes count 2

Adding delays to our task sequencer, part 1

Raymond Chen

Not so fast there.

Apr 1, 2025
Post comments count 1
Post likes count 3

The return of Building 7

Raymond Chen

Pranksters lose one of their longtime inside jokes.

Mar 31, 2025
Post comments count 12
Post likes count 1

If one program blocks shutdown, then all programs block shutdown, revisited

Raymond Chen

No take-backs.

Mar 28, 2025
Post comments count 1
Post likes count 3

The 2025/2026 Seattle Symphony subscription season at a glance

Raymond Chen

The pocket reference guide for 2025/2026.

Mar 28, 2025
Post comments count 3
Post likes count 2

Fixing exception safety in our task_sequencer

Raymond Chen

Exception safety, the forgotten requirement.

Mar 27, 2025
Post comments count 8
Post likes count 2

On launching a dialog when a specific combo box item is selected

Raymond Chen

Changing selections is not a good time to launch a dialog box.

Mar 26, 2025
Post comments count 1
Post likes count 4

Why does INVALID_HANDLE_VALUE cast through a LONG_PTR first?

Raymond Chen

To ensure that the proper sign extension happens.

Mar 25, 2025
Post comments count 4
Post likes count 1

We’ll fly you to Atlanta, Texas, and getting to your hotel in Atlanta, Georgia is your problem

Raymond Chen

Reading the fine print.

Mar 25, 2025
Post comments count 7
Post likes count 4

A note on the USB-to-PS/2 mouse adapter that came with Microsoft mouse devices

Raymond Chen

It's a purely mechanical adapter that relies on smarts in the mouse itself.

Mar 24, 2025
Post comments count 11
Post likes count 2

On how different Windows ABIs choose how to pass 32-bit values in 64-bit registers

Raymond Chen

Surveying the options and looking for commonalities.

Mar 21, 2025
Post comments count 11
Post likes count 4

The case of the critical section that let multiple threads enter a block of code

Raymond Chen

It had one job.

Mar 20, 2025
Post comments count 4
Post likes count 1

What could cause a memory corruption bug to disappear in safe mode?

Raymond Chen

A simplified execution environment means fewer things that you can stumble over.

Mar 19, 2025
Post comments count 9
Post likes count 7

You can’t simulate keyboard input with PostMessage, revisited

Raymond Chen

If it didn't go through the input system, it only looks like input as much as the app allows itself to be fooled.

Mar 18, 2025
Post comments count 7
Post likes count 7

Why didn’t Windows 95 setup use a miniature version of Windows 95 as its fallback GUI?

Raymond Chen

Avoiding an interim GUI environment.

Mar 17, 2025
Post comments count 3
Post likes count 3

Dubious security vulnerability: A program does not run correctly if you run it the wrong way

Raymond Chen

So what did you expect?

Mar 14, 2025
Post comments count 0
Post likes count 2

The case of COM failing to pump messages in a single-threaded COM apartment

Raymond Chen

A customer encountered a hang caused by COM not pumping messages while waiting for a cross-thread operation to complete. They were using the class for serializing asynchronous operations on a UI thread they created to handle accessibility callbacks. The hang stack looked like this: We see that we have a UI thread (notice the at the bottom of the stack), yet COM decided to block without pumping messages ( instead of (). Is this a bug in the task sequencer? Let's look at the stack more closely. A message arrived via , and that then queued a task into the task sequencer. The saw that the task sequencer had...

Mar 13, 2025
Post comments count 12
Post likes count 3

Making sure that a DLL loads only from your application directory

Raymond Chen

You can ask for it as an option, but think about what you're actually protecting against.

Mar 12, 2025
Post comments count 2
Post likes count 4

What are the thread safety requirements of HSTRING and BSTR?

Raymond Chen

They do not have thread affinity.

Mar 11, 2025
Post comments count 9
Post likes count 3

What an insightful observation, you get to wear “the hat”

Raymond Chen

Maybe not so insightful.

Mar 10, 2025
Post comments count 0
Post likes count 4

How do I destroy an ABI pointer that I extracted from a C++/WinRT object?

Raymond Chen

You can clean it up the ABI way, whatever that is.

Mar 7, 2025
Post comments count 21
Post likes count 4

To some people, time zones are just a fancy way of sounding important, episode 2

Raymond Chen

Words have meaning.

Mar 6, 2025
Post comments count 6
Post likes count 6

How can I choose a different C++ constructor at runtime?

Raymond Chen

Make somebody else do it, and then use copy elision.

Mar 5, 2025
Post comments count 0
Post likes count 2

I tried to subscribe to a C++/WinRT event, but my callback was never called

Raymond Chen

Check how you registered your event handler.

Mar 4, 2025
Post comments count 2
Post likes count 3

Microspeak: Respin

Raymond Chen

Spin it up again, baby.

Mar 3, 2025
Post comments count 1
Post likes count 3

Lexically scoped functions accessing parent locals: The display

Raymond Chen

Using a well-known location instead of copying frame pointers.

Feb 28, 2025
Post comments count 1
Post likes count 2

C++/WinRT implementation inheritance: Notes on winrt::implements, part 8

Raymond Chen

Comparing the options.

Feb 27, 2025
Post comments count 0
Post likes count 2

C++/WinRT implementation inheritance: Notes on winrt::implements, part 7

Raymond Chen

Inheritance without involving <CODE>winrt::implements</CODE> at all.

Feb 26, 2025
Post comments count 0
Post likes count 1

C++/WinRT implementation inheritance: Notes on winrt::implements, part 6

Raymond Chen

Using CRTP to delegate the method.

Feb 25, 2025
Post comments count 0
Post likes count 1

C++/WinRT implementation inheritance: Notes on winrt::implements, part 5

Raymond Chen

When the base class isn't self-contained.

Feb 24, 2025
Post comments count 0
Post likes count 1

C++/WinRT implementation inheritance: Notes on winrt::implements, part 4

Raymond Chen

Simple inheritance of a self-contained <CODE>implements</CODE>.

Feb 21, 2025
Post comments count 9
Post likes count 1

C++/WinRT implementation inheritance: Notes on winrt::implements, part 3

Raymond Chen

Discovering the legal inheritance structures for <CODE>winrt::<WBR>implements</CODE>.

Feb 20, 2025
Post comments count 0
Post likes count 1

C++/WinRT implementation inheritance: Notes on winrt::implements, part 2

Raymond Chen

Untangling <CODE>unwrap_<WBR>implements_t</CODE>.

Feb 19, 2025
Post comments count 0
Post likes count 3

C++/WinRT implementation inheritance: Notes on winrt::implements, part 1

Raymond Chen

A closer look at the parameters to the <CODE>implements</CODE> template.

Feb 18, 2025
Post comments count 4
Post likes count 7

Your statement is now available, just two hidden flyouts and five clicks away

Raymond Chen

Beware of the leopard.

Feb 17, 2025
Post comments count 7
Post likes count 7

API design note: Beware of adding an “Other” enum value

Raymond Chen

What are you going to do when you add a new kind?

Feb 14, 2025
Post comments count 3
Post likes count 3

Investigating an argument-dependent lookup issue and working around it

Raymond Chen

Picking apart the language specification.

Feb 13, 2025
Post comments count 1
Post likes count 3

A sample implementation of the weak reference pattern for COM callbacks

Raymond Chen

A forwarder through a weak reference.

Feb 12, 2025
Post comments count 3
Post likes count 2

Async-Async revisited: What about cancellation?

Raymond Chen

Even the cancellation is async.

Feb 11, 2025
Post comments count 3
Post likes count 9

Did the Windows 95 setup team forget that MS-DOS can do graphics?

Raymond Chen

Oh look what you just made there.

Feb 10, 2025
Post comments count 4
Post likes count 3

How does Explorer find the “first” icon in a file

Raymond Chen

It enumerates them and takes the first one, so this is really a question about enumeration.

Feb 7, 2025
Post comments count 1
Post likes count 3

Using alternate locales to get more interesting case mapping than the C

Raymond Chen

Looking for something better.

Feb 6, 2025
Post comments count 7
Post likes count 1

The default C locale is not a very interesting one

Raymond Chen

It barely understands anything.

Feb 5, 2025
Post comments count 7
Post likes count 1

On exactly when XAML bindings are evaluated if an element is not yet loaded

Raymond Chen

It depends on which abstraction you prefer.

Feb 4, 2025
Post comments count 4
Post likes count 5

The original name for Flexible Single Master Operations in Active Directory

Raymond Chen

Not that kind of F-word.

Feb 3, 2025
Post comments count 2
Post likes count 2

On trying to log an exception as it leaves your scope

Raymond Chen

You can't watch it from an object on the outside.

Jan 31, 2025
Post comments count 1
Post likes count 1

Creating a generic insertion iterator, part 2

Raymond Chen

Satisfying the iterator requirements, perhaps with a little cheating.

Jan 30, 2025
Post comments count 0
Post likes count 1

Creating a generic insertion iterator, part 1

Raymond Chen

We provide the boilerplate; you provide the smarts.

Jan 29, 2025
Post comments count 6
Post likes count 2

How do I create an inserter iterator that does unhinted insertion into an associative container like std::map?

Raymond Chen

Curiously missing from the standard library.

Jan 28, 2025
Post comments count 11
Post likes count 4

My electric toothbrush was acting up, so I tried to reboot it

Raymond Chen

It didn't help.

Jan 27, 2025
Post comments count 9
Post likes count 3

A pattern for obtaining a single value while holding a lock

Raymond Chen

The immediately-invoked lambda that returns a value.

Jan 24, 2025
Post comments count 0
Post likes count 5

A brief and incomplete comparison of memory corruption detection tools

Raymond Chen

A short overview, definitely incomplete.

Jan 23, 2025
Post comments count 0
Post likes count 3

Memory corruption from outside the process looks like space aliens

Raymond Chen

The write isn't visible to your process, just the effect of the write.

Jan 22, 2025
Post comments count 15
Post likes count 4

Be mindful of temporal terms in documents: What is the reference point in time?

Raymond Chen

What is your implied point in time for the reference?

Jan 21, 2025
Post comments count 4
Post likes count 1

Why is there a bulge on my bicycle tire when I inflate it?

Raymond Chen

Get the order of operations right.

Jan 21, 2025
Post comments count 5
Post likes count 3

Why doesn’t the Windows blue screen of death prominently identify the company that created the driver that crashed?

Raymond Chen

Because the driver that crashed may not be the one at fault.

Jan 20, 2025
Post comments count 1
Post likes count 3

Reminder: When a C++ object fails to construct, the destructor does not run

Raymond Chen

If you need to run after a failed construction, you have to put it in a base class or member variable.

Jan 17, 2025
Post comments count 6
Post likes count 3

The case of the crash when trying to erase an element from a std::set

Raymond Chen

Another kind of fiasco.

Jan 16, 2025
Post comments count 3
Post likes count 2

In a C++ class template specialization, how can I call the unspecialized version of a method?

Raymond Chen

You can't talk about things that might exist, so instead talk about things that do.

Jan 15, 2025
Post comments count 0
Post likes count 2

How does Get­User­Default­Geo­Name choose between ISO 3166-1 and UN M.49 codes?

Raymond Chen

Clarifying the behavior.

Jan 14, 2025
Post comments count 5
Post likes count 2

Microspeak: The walk-on topic

Raymond Chen

Just walk on in with your topic.

Jan 13, 2025
Post comments count 4
Post likes count 3

A simplified overview of ways to add or update elements in a std::map

Raymond Chen

And using it to find missing opportunities.

Jan 10, 2025
Post comments count 2
Post likes count 1

Why does inadvertently passing a std::string instead of a char const* to a variadic function crash on x86-32 but not x86-64?

Raymond Chen

Looking at the calling convention and the small string optimization.

Jan 9, 2025
Post comments count 0
Post likes count 4

Inside STL: Waiting for a std::atomic<std::shared_ptr<T>> to change, part 2

Raymond Chen

Digging into the libstdc++ implementation.

Jan 8, 2025
Post comments count 1
Post likes count 2

Inside STL: Waiting for a std::atomic<std::shared_ptr<T>> to change, part 1

Raymond Chen

Waiting on a single pointer, but checking for two.

Jan 7, 2025
Post comments count 11
Post likes count 3

Gesellschaft zur Stärkung der Verben: The German Society for the Irregularization of Verbs

Raymond Chen

Stand strong and proud.

Jan 7, 2025
Post comments count 5
Post likes count 6

Emergency power resets on Lenovo, HP, Dell, and Acer laptops

Raymond Chen

Looking for the magic button.

Jan 6, 2025
Post comments count 6
Post likes count 1

How can I tell whether a change to a control was due to the user or due to my program?

Raymond Chen

You know when it was done by your program because you did it.

Jan 3, 2025
Post comments count 1
Post likes count 2

Forcing an ERROR_KEY_DELETED error when trying to open HKEY_CURRENT_USER\Software

Raymond Chen

Just an exercise to show that it can be done, even though it's highly unlikely to occur in practice.

Jan 2, 2025
Post comments count 1
Post likes count 2

Could I be getting ERROR_KEY_DELETED for HKEY_CURRENT_USER\Software when the user logs off?

Raymond Chen

Probably not, but there are some edge cases.

Jan 1, 2025
Post comments count 1
Post likes count 2

How is it possible to get ERROR_KEY_DELETED when I’m creating a key?

Raymond Chen

The key that got deleted is not the one you are trying to create.

Dec 31, 2024
Post comments count 6
Post likes count 3

2024 year-end link clearance

Raymond Chen

The cycle completes.

Dec 31, 2024
Post comments count 4
Post likes count 4

Making sure the Microsoft Visual C++ compiler chooses the right source encoding

Raymond Chen

Making sure the file and settings are set correctly.

Dec 30, 2024
Post comments count 4
Post likes count 3

How various git diff viewers represent file encoding changes in pull requests

Raymond Chen

The invisible UTF-8 BOM, and sometimes invisible encoding changes.

Dec 27, 2024
Post comments count 4
Post likes count 2

In C++, failure to meet the requirements does not always mean that you fail if you don’t meet the requirements

Raymond Chen

Combining SFINAE/requires, standard layout, and overload resolution.

Dec 26, 2024
Post comments count 8
Post likes count 4

Why are Win32 resources strings bundled at all? And why bundles of 16?

Raymond Chen

Balancing multiple performance factors.

Dec 25, 2024
Post comments count 0
Post likes count 2

How can I check if two GUIDs are equal when they are provided as strings?

Raymond Chen

A customer asked if there was a helper function in the system that accepted two strings and reported whether the s they represent are equal. This is a tricky question, because you first have to decide what "represent" means. There are many ways of representing a as a string. It could be just 32 case-insensitive hexadecimal digits. Or maybe there are internal hyphens to separate the groups. And the whole thing might be enclosed in braces or parentheses. External and interior whitespace might be allowed. Trailing garbage might be accepted (and ignored). And then there's the special format {0x00000000,0x0000,0x00...

Dec 24, 2024
Post comments count 0
Post likes count 3

A design flaw in the Windows 3D Pipes screen saver pointed out by a customer

Raymond Chen

Time-wasting.

Dec 23, 2024
Post comments count 5
Post likes count 2

A common proposed solution to certain categories of IFNDR: Getting the linker to verify identical functions

Raymond Chen

You could do it, but it could cramp your style.

Dec 20, 2024
Post comments count 0
Post likes count 2

How do I register a file type for a scripting language so that users get a warning when they run an untrusted script?

Raymond Chen

Use the FTA_AlwaysUnsafe edit flag.

Dec 19, 2024
Post comments count 7
Post likes count 5

Inside STL: The atomic shared_ptr

Raymond Chen

There's a lock hiding inside the pointer.

Dec 18, 2024
Post comments count 2
Post likes count 1

Is there a way to split the git history of a file or combine the histories of two files without a merge commit?

Raymond Chen

Studying how git recovers history.

Dec 17, 2024
Post comments count 6
Post likes count 3

Microspeak terms that didn’t take hold: airspace, synthetics, and AOI

Raymond Chen

Sometimes they don't stick.

Dec 16, 2024
Post comments count 0
Post likes count 2

Why do we have header files <pshpackN.h> and <poppack.h> instead of just issuing the pragma directly?

Raymond Chen

Because the pragma may not work everywhere.

Dec 13, 2024
Post comments count 0
Post likes count 3

Converting to a derived class from the future: How to cast from a base class to an incomplete derived class?

Raymond Chen

Deferring the definition until the class is complete.

Dec 12, 2024
Post comments count 0
Post likes count 3

API naming principles for conditional operations: On, When, and If

Raymond Chen

Describing when a condition is tested.

Dec 11, 2024
Post comments count 8
Post likes count 3

What is the CONTINUE_IF_FAILED equivalent of RETURN_IF_FAILED?

Raymond Chen

Be careful how you write it, or better: Don't write it at all.

Dec 10, 2024
Post comments count 3
Post likes count 1

It rather involved being on the other side of this airtight hatchway: Disabling anti-malware scanning

Raymond Chen

If you have already infiltrated the process, then you can disable things from the inside.

Dec 9, 2024
Post comments count 0
Post likes count 2

Learning to read C++ compiler errors: Failing to create a shared_ptr

Raymond Chen

Understanding what you asked the compiler to do, and why it couldn't comply.

Dec 6, 2024
Post comments count 4
Post likes count 1

Learning to read C++ compiler errors: Nonsensical errors from a function declaration

Raymond Chen

Look closely at what the error message is complaining about.

Dec 5, 2024
Post comments count 1
Post likes count 3

Won’t waiting for multiple threads one at a time introduce a severe performance issue?

Raymond Chen

It depends on how long you plan on waiting.

Dec 4, 2024
Post comments count 0
Post likes count 3

Why does my DLL reference count go up by one every time I create and exit a thread?

Raymond Chen

If you use a wrapper, you need to follow the wrapper's rules.

Dec 3, 2024
Post comments count 2
Post likes count 3

Tricks from product support: We’re not smart enough to debug the problem, can you help us?

Raymond Chen

It's not you, it's me.

Dec 2, 2024
Post comments count 1
Post likes count 4

News flash: Desire for loud cars correlates with psychopathy and sadism

Raymond Chen

More research into loud vehicles.

Dec 2, 2024
Post comments count 5
Post likes count 1

An analogy about register preservation rules in calling conventions

Raymond Chen

And tying it back to unwind codes.

Nov 29, 2024
Post comments count 1
Post likes count 1

Assessing the attack complexity of a race condition security vulnerability

Raymond Chen

It's not just how small the race window is, but how easy it is to hit the window.

Nov 28, 2024
Post comments count 0
Post likes count 3

Why does my program successfully take foreground only when running under the debugger?

Raymond Chen

That's a special exception to the normal foreground rules.

Nov 27, 2024
Post comments count 0
Post likes count 1

Checking whether a URI refers to a Web site root

Raymond Chen

Let somebody else do the parsing.

Nov 26, 2024
Post comments count 0
Post likes count 1

Microspeak: Real estate and Airspace

Raymond Chen

Space on the screen and negotiating control over it.

Nov 25, 2024
Post comments count 0
Post likes count 1

How can I know when a window has processed a message that I posted to it?

Raymond Chen

Best would be to have it tell you.

Nov 22, 2024
Post comments count 0
Post likes count 2

In C++, how can I make a default parameter be the this pointer of the caller?, revisited

Raymond Chen

Expanding on the previous pattern.

Nov 21, 2024
Post comments count 1
Post likes count 2

How can I detect which menu my item was invoked from?

Raymond Chen

Just give them all different IDs. But this might itself by an XY problem.

Nov 20, 2024
Post comments count 3
Post likes count 4

How do I determine whether Explorer is showing or hiding file extensions?

Raymond Chen

You can ask, but maybe you're asking the wrong question.

Nov 19, 2024
Post comments count 4
Post likes count 7

A wrinkle in how Windows 95 setup bootstrapped its initial GUI step

Raymond Chen

Getting access to the common controls that don't exist until Windows 95.

Nov 18, 2024
Post comments count 2
Post likes count 2

The operations for reading and writing single elements for C++ standard library maps

Raymond Chen

Breaking down the options.

Nov 15, 2024
Post comments count 6
Post likes count 4

How do I put a non-copyable, non-movable, non-constructible object into a std::optional?

Raymond Chen

Taking advantage of the conversion operator.

Nov 14, 2024
Post comments count 0
Post likes count 3

Solving the puzzle of trying to put an object into a std::optional

Raymond Chen

How do I set a value? Let me count the ways.

Nov 13, 2024
Post comments count 14
Post likes count 2

The puzzle of trying to put an object into a std::optional

Raymond Chen

The C++ standard library template type has one of two states. It could be empty (not contain anything), or it could contain a . Suppose you start with an empty . How do you put a into it? One of my colleagues tried to do it in what seemed to be the most natural way: Use the assignment operator. Unfortunately, the assignment failed to compile: I asked for the rest of the error message, because the details will explain what the compiler tried to do (and why it couldn't). It's long, but we'll walk through it. The compiler is showing its work. It's showing you all the possible overloaded assignment opera...

Nov 12, 2024
Post comments count 6
Post likes count 11

Why did Windows 95 setup use three operating systems?

Raymond Chen

Simplifying the problem to an earlier problem.

Nov 11, 2024
Post comments count 7
Post likes count 5

Debugger breakpoints are usually implemented by patching the in-memory copy of the code

Raymond Chen

The code in memory may not match what the debugger shows you if the debugger is itself is doing the changing.

Nov 8, 2024
Post comments count 4
Post likes count 13

The case of a program that crashed on its first instruction

Raymond Chen

Didn't even make it out of the gate.

Nov 7, 2024
Post comments count 6
Post likes count 5

Why do I observe reads from a memory-mapped file when writing large blocks?

Raymond Chen

The CPU doesn't see the entire write at once.

Nov 6, 2024
Post comments count 1
Post likes count 2

How do I declare an operator overload for my Windows Runtime class?

Raymond Chen

That's not something expressible in the Windows Runtime.

Nov 5, 2024
Post comments count 6
Post likes count 4

What’s the difference between Display size and Screen size in the Windows 95 display control panel?

Raymond Chen

No meaningful difference, though others have created a difference.

Nov 4, 2024
Post comments count 4
Post likes count 3

On the limits of time travel in the face of undefined behavior in C

Raymond Chen

C imposes some constraints, but the principle is mostly still there.

Nov 1, 2024
Post comments count 9
Post likes count 6

On locale-aware substring matching, either case-sensitive or case-insensitive

Raymond Chen

It's surprisingly complicated, but fortunately, somebody has done it for you.

Oct 31, 2024
Post comments count 23
Post likes count 10

What has case distinction but is neither uppercase nor lowercase?

Raymond Chen

It has one foot in each world but belongs to neither.

Oct 30, 2024
Post comments count 0
Post likes count 3

I have enabled “take ownership” permission, but I still cannot obtain write access

Raymond Chen

Taking ownership is only one part of gaining write access.

Oct 29, 2024
Post comments count 0
Post likes count 2

Reverse-engineering what a “short” section is

Raymond Chen

The long and short of it all.

Oct 28, 2024
Post comments count 1
Post likes count 2

How useful is the hint passed to the std::unordered_… collections?

Raymond Chen

Only a little, or sometimes not at all.

Oct 25, 2024
Post comments count 0
Post likes count 2

How can I explicitly specialize a templated C++ constructor, follow-up notes

Raymond Chen

You can use a maker function, but that doesn't let you escape the problem.

Oct 24, 2024
Post comments count 1
Post likes count 1

It rather involved being on the other side of the airtight hatchway: Defeating ASLR after you’ve gained RCE via ROP

Raymond Chen

If you defeat ASLR, then you can defeat ASLR.

Oct 23, 2024
Post comments count 2
Post likes count 2

How do I create a Windows Runtime IRandom­Access­Stream around a bunch of bytes or a classic COM IStream?

Raymond Chen

Another wrapper function.

Oct 22, 2024
Post comments count 3
Post likes count 5

Did Windows 95 shrink the default font size of windowed MS-DOS apps?

Raymond Chen

The effect was that it shrunk, but only sometimes.

Oct 21, 2024
Post comments count 10
Post likes count 2

Why does adding WS_MINIMIZE­BOX change how my window behaves when the user presses Win+D?

Raymond Chen

It minimizes your window if it can.

Oct 18, 2024
Post comments count 2
Post likes count 1

Evaluating tail call elimination in the face of return address protection, part 2

Raymond Chen

Rewriting the activation frame.

Oct 17, 2024
Post comments count 2
Post likes count 1

Evaluating tail call elimination in the face of return address protection, part 1

Raymond Chen

Reusing the activation frame.

Oct 16, 2024
Post comments count 4
Post likes count 3

Effects of classic return address tricks on hardware-assisted return address protection

Raymond Chen

Return address manipulations that are possibly even more impermissible than they already were.

Oct 15, 2024
Post comments count 4
Post likes count 2

A quick introduction to return address protection technologies

Raymond Chen

Detecting attempts to manipulate the return address.

Oct 14, 2024
Post comments count 13
Post likes count 3

On naming things: The tension between naming something for what it is, what it does, or how it is used

Raymond Chen

You are guaranteed to make someone upset.

Oct 11, 2024
Post comments count 1
Post likes count 3

How can I explicitly specialize a templated C++ constructor?

Raymond Chen

Looking for a C++ tag type for representing another type.

Oct 10, 2024
Post comments count 2
Post likes count 3

A correction to the awaitable lock for C++ PPL tasks

Raymond Chen

Over-scoped lock.

Oct 9, 2024
Post comments count 3
Post likes count 3

If threads are created without a message queue, why can I post to them immediately upon creation?

Raymond Chen

Check who is doing the posting.

Oct 8, 2024
Post comments count 1
Post likes count 2

Microspeak: Run to ground

Raymond Chen

Come to a resolution.

Oct 7, 2024
Post comments count 14
Post likes count 8

A popular but wrong way to convert a string to uppercase or lowercase

Raymond Chen

Converting character by character isn't good enough any more.

Oct 4, 2024
Post comments count 0
Post likes count 3

How does the linker decide whether to call WinMain or wWinMain?

Raymond Chen

If you don't tell it, it will try to figure it out.

Oct 3, 2024
Post comments count 8
Post likes count 6

How can I detect whether the user is running as an elevated administrator (as opposed to a natural administrator)?

Raymond Chen

You can ask for the elevation type.

Oct 2, 2024
Post comments count 0
Post likes count 3

A function for creating an absolute security descriptor from a self-relative one

Raymond Chen

Just wrap it up.

Oct 1, 2024
Post comments count 5
Post likes count 5

Misunderstanding the “Prevent access to registry editing tools” policy

Raymond Chen

It prevents access to the tools, but not to the registry itself.

Sep 30, 2024
Post comments count 3
Post likes count 1

Pulling a single item from a C++ parameter pack by its index, remarks

Raymond Chen

Why such a complicated way to pull the type from the pack?

Sep 27, 2024
Post comments count 3
Post likes count 5

The case of the crash when destructing a std::map

Raymond Chen

Who is corrupting the map?

Sep 26, 2024
Post comments count 3
Post likes count 3

If you’re going to specify the LVS_SORTASCENDING or LVS_SORTDESCENDING style, you had better be telling the truth

Raymond Chen

Because the listview control uses it to optimize searching.

Sep 25, 2024
Post comments count 1
Post likes count 3

Another example of the Windows Runtime interop pattern: Using the UserConsentVerifier from a Win32 program

Raymond Chen

Following the standard pattern.

Sep 24, 2024
Post comments count 3
Post likes count 2

The UserConsentVerifier confirms that the user is there, but it doesn’t protect any data

Raymond Chen

Is that really you?

Sep 23, 2024
Post comments count 6
Post likes count 2

Going beyond the empty set: Embracing the power of other empty things

Raymond Chen

Just because there's nothing in it doesn't mean it's not valid.

Sep 20, 2024
Post comments count 5
Post likes count 3

How can I check that all the changes in a git branch have been cherry-picked or rebased into its upstream branch?

Raymond Chen

You can pretend to merge it and see if anything happens.

Sep 19, 2024
Post comments count 0
Post likes count 5

My window has the WS_EX_NOACTIVATE extended style, but it got activated anyway

Raymond Chen

Well, at least it wasn't activated by a click.

Sep 18, 2024
Post comments count 6
Post likes count 3

More on the mysterious [default_interface] attribute in Windows Runtime classes

Raymond Chen

Forcing you to make a choice.

Sep 17, 2024
Post comments count 1
Post likes count 3

It rather involved being on the other side of this airtight hatchway: Posting completions to somebody else’s I/O completion port

Raymond Chen

If you have gained access to it, then that was the problem.

Sep 16, 2024
Post comments count 5
Post likes count 6

Some notes on Win32 carets

Raymond Chen

Assorted notes and musings.

Sep 13, 2024
Post comments count 3
Post likes count 4

The case of the fail-fast crashes coming from the power management system

Raymond Chen

Understanding why it decided to fail fast.

Sep 12, 2024
Post comments count 0
Post likes count 3

How can I tell whether two programs will share drive letter mappings?

Raymond Chen

You can compare the authentication IDs.

Sep 11, 2024
Post comments count 2
Post likes count 1

The case of the string being copied from a mysterious pointer to invalid memory, revisited

Raymond Chen

Reflections on an older topic.

Sep 10, 2024
Post comments count 1
Post likes count 2

Does the Resource Compiler have a separate preprocessor or doesn’t it?

Raymond Chen

It did, but now it doesn't.

Sep 9, 2024
Post comments count 6
Post likes count 4

GitHub trick to find the commit that deleted a file

Raymond Chen

Ask for the history of the file.

Sep 6, 2024
Post comments count 0
Post likes count 3

The case of the image that came out horribly slanted: Negative stride

Raymond Chen

It's all topsy-turvy.

Sep 5, 2024
Post comments count 6
Post likes count 2

The case of the image that came out horribly slanted: Taking the pitch into account

Raymond Chen

Getting the pieces to line up.

Sep 4, 2024
Post comments count 4
Post likes count 3

The case of the image that came out horribly slanted: Diagnosis

Raymond Chen

Imperfect pitch.

Sep 3, 2024
Post comments count 0
Post likes count 6

Why did Windows 95 use blue screen error messages instead of hard error messages?

Raymond Chen

You may not able to get there from here.

Sep 2, 2024
Post comments count 10
Post likes count 3

The Co­Initialize­Security function demands an absolute security descriptor

Raymond Chen

Even though you usually have a self-relative one in hand.

Aug 30, 2024
Post comments count 12
Post likes count 4

In the Windows kernel, what is a LUID, and what makes it loo-ey?

Raymond Chen

It's a locally-unique ID, for a specific definition of "local".

Aug 29, 2024
Post comments count 7
Post likes count 3

How is the Windows.Foundation.Uri.Domain property different from Host?

Raymond Chen

It's an educated guess.

Aug 28, 2024
Post comments count 0
Post likes count 2

On the strange status of wchar_t in classic MIDL

Raymond Chen

From the era before <CODE>wchar_t</CODE> was a standard type.

Aug 27, 2024
Post comments count 3
Post likes count 3

The Microsoft/IBM joint development was built on mutual respect, wait, is respect the right word?

Raymond Chen

Maybe it's some other word.

Aug 26, 2024
Post comments count 9
Post likes count 3

Thoughts on finding the essential elements of a set

Raymond Chen

Another binary search, but searching a different way.

Aug 23, 2024
Post comments count 7
Post likes count 5

What if I need to wait for more than MAXIMUM_WAIT_OBJECTS threads?

Raymond Chen

Studying your options, and the consequences of breaking things up.

Aug 22, 2024
Post comments count 3
Post likes count 1

The role of the activation factory in the Windows Runtime

Raymond Chen

The activation factory represents the class itself.

Aug 21, 2024
Post comments count 1
Post likes count 4

What does ERROR_KEY_DELETED mean?

Raymond Chen

You now have a handle to a key that doesn't exist, and there's nothing you can do with it.

Aug 20, 2024
Post comments count 1
Post likes count 4

Another tribute to Microsoft history hiding in Building 41

Raymond Chen

Logo touches.

Aug 19, 2024
Post comments count 11
Post likes count 1

Constructing nodes of a hand-made linked list, how hard can it be?

Raymond Chen

Trying to force copy elision.

Aug 16, 2024
Post comments count 4
Post likes count 1

The case of the missing ordinal 380

Raymond Chen

Untangling the error message and developing a theory.

Aug 15, 2024
Post comments count 9
Post likes count 4

Instead of putting a hash in the Portable Executable timestamp field, why not create a separate field for the hash?

Raymond Chen

That would defeat the purpose.

Aug 14, 2024
Post comments count 13
Post likes count 3

Temporarily dropping a lock: The anti-lock pattern

Raymond Chen

It's not to prevent locking, but rather to counteract a lock.

Aug 13, 2024
Post comments count 0
Post likes count 1

A look back at one of the (many) projects code-named Highlander

Raymond Chen

The showdown that almost repeated.

Aug 12, 2024
Post comments count 14
Post likes count 6

Embracing the power of the empty set in API design (and applying this principle to selectors and filters)

Raymond Chen

You got plenty of nothing.

Aug 9, 2024
Post comments count 2
Post likes count 3

What does it even mean to Close a Windows Runtime asynchronous operation or action?

Raymond Chen

That's the end of the road.

Aug 8, 2024
Post comments count 0
Post likes count 4

Why do I get E_ACCESS­DENIED when trying to access my brokered Windows Runtime object?COM is double-checking the trust level.

Raymond Chen

COM is double-checking the trust level.

Aug 7, 2024
Post comments count 1
Post likes count 1

How do I know when the user has finished interacting with the Accounts­Settings­Pane?

Raymond Chen

You can use the version that runs an asynchronous operation.

Aug 6, 2024
Post comments count 9
Post likes count 3

It rather involved being on the other side of the airtight hatchway: Disabling a security feature as an administrator

Raymond Chen

At least they don't beat around the bush.

Aug 5, 2024
Post comments count 9
Post likes count 1

What are the dire consequences of registering a RunOnce command from my RunOnce command?

Raymond Chen

The circle of life, or a perpetual motion machine.

Aug 2, 2024
Post comments count 3
Post likes count 3

The difference between undefined behavior and ill-formed C++ programs

Raymond Chen

They are two kinds of undefined-ness, one for runtime and one for compile-time.

Aug 1, 2024
Post comments count 2
Post likes count 1

What’s the difference between Data­Package­View.Get­Uri­Async and Data­Package­View.Get­Web­Link­Async?

Raymond Chen

Just improving on an ambiguous name.

Jul 31, 2024
Post comments count 1
Post likes count 3

How to compress out interior padding in a std::pair and why you don’t want to

Raymond Chen

Context-sensitive layout means you get a different structure each time you use it.

Jul 30, 2024
Post comments count 8
Post likes count 5

There is no mystery over who wrote the Blue Screen of Death, despite what some may want you to believe

Raymond Chen

No real contradictions in anybody's story.

Jul 29, 2024
Post comments count 1
Post likes count 1

Why don’t Windows Imaging Component pixel format GUIDs continue their nice pattern?

Raymond Chen

Patterns are predictable, which is not always a good thing.

Jul 26, 2024
Post comments count 2
Post likes count 2

What can I do if IMlangConvertCharset is unable to convert from code page 28591 directly to UTF-8?

Raymond Chen

You can do the conversion in two steps using things you already have.

Jul 25, 2024
Post comments count 0
Post likes count 2

In my Visual Studio project, I set my Conformance mode to permissive, but it’s still not permissive

Raymond Chen

Digging into what the compiler sees.

Jul 24, 2024
Post comments count 7
Post likes count 1

API naming principle: If there is no direct object, then the direct object is the source object

Raymond Chen

If you don't know what it operates on or produces, then it operates on or produces itself.

Jul 23, 2024
Post comments count 11
Post likes count 3

Unquoted service paths: The new frontier in script kiddie security vulnerability reports

Raymond Chen

Usually not exploitable, but the script kiddies don't know that.

Jul 22, 2024
Post comments count 9
Post likes count 5

Organizing the five creation dispositions of the Create­File function

Raymond Chen

Six possibilities, but only five useful ones.

Jul 19, 2024
Post comments count 0
Post likes count 1

Creating an already-completed asynchronous activity in C++/WinRT, part 9

Raymond Chen

Cheating the delegates.

Jul 18, 2024
Post comments count 1
Post likes count 1

Creating an already-completed asynchronous activity in C++/WinRT, part 8

Raymond Chen

Generalizing the pattern.

Jul 17, 2024
Post comments count 2
Post likes count 1

Creating an already-completed asynchronous activity in C++/WinRT, part 7

Raymond Chen

Implementing the contract directly.

Jul 16, 2024
Post comments count 0
Post likes count 1

Creating an already-completed asynchronous activity in C++/WinRT, part 6

Raymond Chen

Let the conversion do the talking.

Jul 15, 2024
Post comments count 0
Post likes count 1

Creating an already-completed asynchronous activity in C++/WinRT, part 5

Raymond Chen

Trying to fail more correctly.

Jul 12, 2024
Post comments count 2
Post likes count 3

Creating an already-completed asynchronous activity in C++/WinRT, part 4

Raymond Chen

Failing is easy. Failing correctly is hard.

Jul 11, 2024
Post comments count 0
Post likes count 2

Creating an already-completed asynchronous activity in C++/WinRT, part 3

Raymond Chen

Generalizing to the four kinds of Windows Runtime asynchronous activities.

Jul 10, 2024
Post comments count 2
Post likes count 3

Creating an already-completed asynchronous activity in C++/WinRT, part 2

Raymond Chen

Making our function a coroutine.

Jul 9, 2024
Post comments count 2
Post likes count 2

Creating an already-completed asynchonous activity in C++/WinRT, part 1

Raymond Chen

The simplest version.

Jul 8, 2024
Post comments count 5
Post likes count 3

What’s the point of std::monostate? You can’t do anything with it!

Raymond Chen

Not doing anything with it is exactly the point.

Jul 5, 2024
Post comments count 0
Post likes count 2

How do I produce a Windows Runtime asynchronous activity from C++/WinRT?

Raymond Chen

Somebody that deals with them natively.

Jul 4, 2024
Post comments count 2
Post likes count 3

How do I produce a Windows Runtime asynchronous activity from C#?

Raymond Chen

The AsyncInfo helper class converts Tasks to Windows Runtime asynchronous activities.

Jul 3, 2024
Post comments count 1
Post likes count 1

How do I produce a Windows Runtime asynchronous activity from C++/CX?

Raymond Chen

The Parallel Patterns Library has special support for C++/CX.

Jul 2, 2024
Post comments count 22
Post likes count 5

The history of Alt+number sequences, and why Alt+9731 sometimes gives you a heart and sometimes a snowman

Raymond Chen

Code pages and custom keyboard handling.

Jul 1, 2024
Post comments count 5
Post likes count 3

If I register the same shell extension as both a context menu extension and a drag/drop extension, how do I know which one the system is using?

Raymond Chen

Who forced you to register the same shell extension for both?

Jun 28, 2024
Post comments count 11
Post likes count 3

2024 mid-year link clearance

Raymond Chen

Emptying out the junk drawer.

Jun 28, 2024
Post comments count 2
Post likes count 3

Writing a remove_all_pointers type trait, part 2

Raymond Chen

Factoring out the type resolution to after the dangerous part.

Jun 27, 2024
Post comments count 3
Post likes count 3

Writing a remove_all_pointers type trait, part 1

Raymond Chen

Delaying the expansion to avoid infinite recursion.

Jun 26, 2024
Post comments count 2
Post likes count 1

Is there a built-in way in C++/WinRT to get the string name for a Windows Runtime enum?

Raymond Chen

No, and maybe you don't want to.

Jun 25, 2024
Post comments count 0
Post likes count 1

Microspeak: Fun fork

Raymond Chen

A place to party.

Jun 24, 2024
Post comments count 7
Post likes count 1

Finding a specific value in a sequence of integers that changes by at most 1

Raymond Chen

It's basically a discrete version of the intermediate value theorem.

Jun 21, 2024
Post comments count 1
Post likes count 1

The Windows Runtime winrt::hstring and the C++ std::wstring are inter-assignable

Raymond Chen

Just assign them over, no cermony necessary.

Jun 20, 2024
Post comments count 0
Post likes count 3

How to convert between different types of counted-string string types

Raymond Chen

Looking for constructors that take a character count.

Jun 19, 2024
Post comments count 12
Post likes count 2

On the sadness of treating counted strings as null-terminated strings

Raymond Chen

You're throwing away perfectly good data, there.

Jun 18, 2024
Post comments count 9
Post likes count 1

The time smart quotes prevented the entire Office division from committing code

Raymond Chen

Breaking your tools with your tools.

Jun 17, 2024
Post comments count 5
Post likes count 4

How can I view the list of symbols available in a library?

Raymond Chen

A tool hiding inside another tool.

Jun 14, 2024
Post comments count 3
Post likes count 1

Lock-free reference-counting a TLS slot using atomics, part 3

Raymond Chen

Keeping track of two things at once.

Jun 13, 2024
Post comments count 2
Post likes count 2

Lock-free reference-counting a TLS slot using atomics, part 2

Raymond Chen

Getting it is easy. Getting rid of it is hard.

Jun 12, 2024
Post comments count 6
Post likes count 1

Lock-free reference-counting a TLS slot using atomics, part 1

Raymond Chen

First, we do it with locks.

Jun 11, 2024
Post comments count 19
Post likes count 7

The origin story of the Windows 3D Pipes screen saver

Raymond Chen

Looking for a place to show off.

Jun 10, 2024
Post comments count 15
Post likes count 1

How do I get the name of a SID, and what does it mean when the conversion fails?

Raymond Chen

Most places will do it for you, or at least try.

Jun 7, 2024
Post comments count 4
Post likes count 2

What’s the deal with std::type_identity?

Raymond Chen

When you want to use a type without participating in type deduction.

Jun 6, 2024
Post comments count 8
Post likes count 3

Can INI files be Unicode? Yes, they can, but it has to be your idea

Raymond Chen

It'll only be Unicode if it's already Unicode.

Jun 5, 2024
Post comments count 0
Post likes count 3

How 16-bit Windows cached INI files for performance

Raymond Chen

Taking advantage of co-operative multitasking.

Jun 4, 2024
Post comments count 3
Post likes count 1

Why does Global­Lock max out at 255 locks?

Raymond Chen

Because that's how many bits were available for reporting the lock count.

Jun 3, 2024
Post comments count 9
Post likes count 1

More on harmful overuse of std::move

Raymond Chen

Could we expand copy elision to cover the harmful cases?

May 31, 2024
Post comments count 4
Post likes count 6

A graphical depiction of the steps in building a C++ executable, with XAML and packaging

Raymond Chen

Fleshing out the diagram.

May 30, 2024
Post comments count 1
Post likes count 1

A graphical depiction of the steps in building a C++ executable, enhanced for classic Win32

Raymond Chen

Adding in Microsoft-specific tools.

May 29, 2024
Post comments count 5
Post likes count 2

A graphical depiction of the steps in building a C++ executable, basics

Raymond Chen

A high-level overview.

May 28, 2024
Post comments count 6
Post likes count 4

How can I force a DLL to register itself if it won’t respond to regsvr32?

Raymond Chen

You can't force something that isn't there.

May 27, 2024
Post comments count 3
Post likes count 3

Is there any difference between String­From­IID and String­From­CLSID?

Raymond Chen

Not really.

May 24, 2024
Post comments count 0
Post likes count 2

Setting the contents of a Windows Runtime Vector from C++/WinRT in one call

Raymond Chen

The one-stop shop for updating a Windows Runtime Vector.

May 23, 2024
Post comments count 0
Post likes count 1

Creating a prepopulated Windows Runtime Vector from C++/WinRT without going through an explicit std::vector

Raymond Chen

Creating the vector inline.

May 22, 2024
Post comments count 3
Post likes count 1

If you have to create a Windows Runtime Vector from C++/WinRT, do it as late as possible

Raymond Chen

Stay with the <CODE>std::vector</CODE> until you really need the Window Runtime Vector.

May 21, 2024
Post comments count 6
Post likes count 7

A blurry photo of the legendary USB Cart of Death

Raymond Chen

And some details about that infamous on-stage bluescreen.

May 20, 2024
Post comments count 5
Post likes count 1

If you know what interface you want, just pass it directly to CoCreateInstance

Raymond Chen

Avoiding a second round trip.

May 17, 2024
Post comments count 0
Post likes count 1

Why can’t I find the injected name of a templated class’s templated base class?

Raymond Chen

The compiler needs help finding it because it's not findable at the time the template is parsed.

May 16, 2024
Post comments count 1
Post likes count 2

Pulling a single item from a C++ parameter pack by its index

Raymond Chen

Combining a few tools to make a new tool.

May 15, 2024
Post comments count 9
Post likes count 2

Building the most efficient device selector query that selects no devices

Raymond Chen

Looking for the most efficient way of rejecting everything.

May 14, 2024
Post comments count 1
Post likes count 5

The confidential coffee maker was not the only source of shenanigans at the IBM Boca office

Raymond Chen

The culture (and weather) clash continues.

May 13, 2024
Post comments count 2
Post likes count 5

Before you try to change something, make sure you can change nothing

Raymond Chen

Nobody touch anything.

May 10, 2024
Post comments count 4
Post likes count 7

An informal comparison of the three major implementations of std::string

Raymond Chen

Pros and cons.

May 9, 2024
Post comments count 0
Post likes count 1

Asking for a DispatcherQueue from a GUI thread you created

Raymond Chen

Grafting a DispatcherQueue onto an existing thread.

May 8, 2024
Post comments count 3
Post likes count 1

Awaiting a set of handles with a timeout, part 7: Just doing it one at a time

Raymond Chen

A simpler version with its own quirks.

May 7, 2024
Post comments count 7
Post likes count 1

Awaiting a set of handles with a timeout, part 6: Capturing the handles efficiently

Raymond Chen

SFINAE'ing the case of a random-access(ish) iterator.

May 6, 2024
Post comments count 0
Post likes count 1

Awaiting a set of handles with a timeout, part 5: Generalizing the awaiter

Raymond Chen

Fitting into existing patterns.

May 3, 2024
Post comments count 1
Post likes count 1

Awaiting a set of handles with a timeout, part 4: Building our own awaiter

Raymond Chen

To stop relying on unspecified behavior.

May 2, 2024
Post comments count 2
Post likes count 1

Awaiting a set of handles with a timeout, part 3: Going beyond two

Raymond Chen

Generalizing what we learned last time.

May 1, 2024
Post comments count 4
Post likes count 1

Awaiting a set of handles with a timeout, part 2: Continuing with two

Raymond Chen

Giving it another try.

Apr 30, 2024
Post comments count 3
Post likes count 1

Awaiting a set of handles with a timeout, part 1: Starting with two

Raymond Chen

Let's see by seeing if we can do it with just two.

Apr 29, 2024
Post comments count 0
Post likes count 2

Awaiting a set of handles in C++/WinRT

Raymond Chen

It's easier thank you think.

Apr 26, 2024
Post comments count 0
Post likes count 1

Adding state to the update notification pattern, part 8

Raymond Chen

Comparing the two algorithms.

Apr 25, 2024
Post comments count 5
Post likes count 1

Adding state to the update notification pattern, part 7

Raymond Chen

Going free-threaded.

Apr 24, 2024
Post comments count 0
Post likes count 2

Adding state to the update notification pattern, part 6

Raymond Chen

Using a change counter with coalescing.

Apr 23, 2024
Post comments count 1
Post likes count 1

Adding state to the update notification pattern, part 5

Raymond Chen

Using a change counter.

Apr 22, 2024
Post comments count 0
Post likes count 1

Adding state to the update notification pattern, part 4

Raymond Chen

What if the UI thread isn't there to save you?

Apr 19, 2024
Post comments count 2
Post likes count 1

Adding state to the update notification pattern, part 3

Raymond Chen

Abandoning the background work if we know that it is pointless.

Apr 18, 2024
Post comments count 2
Post likes count 1

Adding state to the update notification pattern, part 2

Raymond Chen

First attempt to try to fix the race condition.

Apr 17, 2024
Post comments count 0
Post likes count 3

Adding state to the update notification pattern, part 1

Raymond Chen

Where each notification depends on some state information.

Apr 16, 2024
Post comments count 4
Post likes count 0

In search of the Ballmer Peak, and other results from SIGBOVIK 2024

Raymond Chen

Continuing studies in silliness.

Apr 16, 2024
Post comments count 2
Post likes count 2

Dubious security vulnerability: Program allows its output to be exfiltrated

Raymond Chen

Once the output is generated, the program can't control where it goes.

Apr 15, 2024
Post comments count 4
Post likes count 2

What were the tax consequences of letting Windows 95 team members keep a piece of software as long as they tested it?

Raymond Chen

It basically falls under the <I>de minimis</I> rule.

Apr 12, 2024
Post comments count 8
Post likes count 7

The case of the string being copied from a mysterious pointer to invalid memory

Raymond Chen

Using AppVerifier to deduce the heap allocation history.

Apr 11, 2024
Post comments count 3
Post likes count 2

Why do STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE, and STANDARD_RIGHTS_EXECUTE have the same values?

Raymond Chen

Don't they mean different things?

Apr 10, 2024
Post comments count 1
Post likes count 1

How can I find out which process has locked me out of the clipboard?

Raymond Chen

You can ask for the clipboard opener.

Apr 9, 2024
Post comments count 0
Post likes count 1

If I enumerate all the processes and add up all the Get­Gui­Resources, why doesn’t it match the GR_GLOBAL value?

Raymond Chen

There are some things that aren't charged to processes.

Apr 8, 2024
Post comments count 18
Post likes count 4

How does the classic Win32 ListView handle incremental searching?

Raymond Chen

Combining prefix search with repeated search, to accommodate multiple styles.

Apr 5, 2024
Post comments count 0
Post likes count 2

The case of the exception that a catch (…) didn’t catch

Raymond Chen

Reconstructing a false history.

Apr 4, 2024
Post comments count 16
Post likes count 4

It rather involved being on the other side of this airtight hatchway: System corruption caused by an administrator

Raymond Chen

If your goal was to corrupt the system, you sure are doing it the hard way.

Apr 3, 2024
Post comments count 2
Post likes count 5

Windows debugger trick: Breaking when a specific debugger message is printed

Raymond Chen

A different kind of conditional breakpoint.

Apr 2, 2024
Post comments count 4
Post likes count 6

The history of computing, as told by the hallways of Microsoft Building 41

Raymond Chen

A walk through history, in the form of wall textures.

Apr 1, 2024
Post comments count 19
Post likes count 9

Subroutine calls in the ancient world, before computers had stacks or heaps

Raymond Chen

A lot of computing got done even before we had stacks and heaps.

Mar 29, 2024
Post comments count 10
Post likes count 5

How can I tell C++ that I want to discard a nodiscard value?

Raymond Chen

A variety of tricks, with different degrees of readability and legality.

Mar 28, 2024
Post comments count 8
Post likes count 3

I called Create­Environment­Block with a process’s token, but I didn’t get that process’s environment

Raymond Chen

That's not what the <CODE>Create­Environment­Block</CODE> function does.

Mar 27, 2024
Post comments count 9
Post likes count 5

Some choices for encrypting data so that it can be decrypted only by the same user or computer

Raymond Chen

There's your classic, and there's some newfangled stuff.

Mar 26, 2024
Post comments count 2
Post likes count 4

Dubious security vulnerability: Manual operations can cause a program to hang

Raymond Chen

You did this to yourself.

Mar 25, 2024
Post comments count 0
Post likes count 4

Why isn’t C++ using my default parameter to deduce a template type?

Raymond Chen

Trying to have it both ways.

Mar 22, 2024
Post comments count 7
Post likes count 2

Why does my thread get a broken string as its initial parameter?

Raymond Chen

It got converted too late.

Mar 21, 2024
Post comments count 13
Post likes count 2

Using the Display­Information class from a desktop Win32 application, part 2

Raymond Chen

Completing the prerequisites.

Mar 20, 2024
Post comments count 3
Post likes count 3

Using the Display­Information class from a desktop Win32 application, part 1

Raymond Chen

A little interop music.

Mar 19, 2024
Post comments count 0
Post likes count 1

How well does C++/WinRT com_ptr support class template argument deduction (CTAD)?

Raymond Chen

It doesn't even try, and probably doesn't want you to do it.

Mar 18, 2024
Post comments count 0
Post likes count 1

How well does wil com_ptr support class template argument deduction (CTAD)?

Raymond Chen

Falling into a hole in the C++ language, not filled in until C++20.

Mar 15, 2024
Post comments count 4
Post likes count 1

How well does WRL ComPtr support class template argument deduction (CTAD)?

Raymond Chen

It tries too hard and accidentally breaks CTAD.

Mar 14, 2024
Post comments count 1
Post likes count 1

How well does ATL CComPtr support class template argument deduction (CTAD)?

Raymond Chen

It actually works right out of the box.

Mar 13, 2024
Post comments count 1
Post likes count 1

How well does MFC IPTR/CIP support class template argument deduction (CTAD)?

Raymond Chen

Not very well, thanks to requiring the interface ID to be specified explicitly.

Mar 12, 2024
Post comments count 0
Post likes count 2

How well does _com_ptr_t support class template argument deduction (CTAD)?

Raymond Chen

Not very well, thanks to storing the pointer and IID pair in a helper type.

Mar 11, 2024
Post comments count 3
Post likes count 3

Class template argument deduction (CTAD) and C++ COM wrappers: Initial explorations

Raymond Chen

How well do these libraries support a feature that likely didn't exist at the time they were written?

Mar 8, 2024
Post comments count 0
Post likes count 0

The 2024/2025 Seattle Symphony subscription season at a glance

Raymond Chen

The pocket reference guide for 2024/2025.

Mar 8, 2024
Post comments count 5
Post likes count 1

How can I force a copy of a C++ value?

Raymond Chen

Forcing a copy with a minimum of typing.

Mar 7, 2024
Post comments count 4
Post likes count 1

In C++/WinRT, you shouldn’t destroy an object while you’re co_awaiting it

Raymond Chen

A generalization of the ground rules of programming.

Mar 6, 2024
Post comments count 5
Post likes count 1

How do I make an expression non-movable? What’s the opposite of std::move?

Raymond Chen

You can turn it into a const thing so it's no longer movable, in a conventional sense.

Mar 5, 2024
Post comments count 4
Post likes count 2

In domain\user syntax, you can often use the period as an abbreviation for “this computer”

Raymond Chen

A bit of a typing saver, particularly with complex machine names.

Mar 4, 2024
Post comments count 1
Post likes count 4

Is shadowing a member variable from a base class a bad thing? Maybe, but maybe not.

Raymond Chen

It depends on the order in which things occurred.

Mar 1, 2024
Post comments count 14
Post likes count 4

C++/WinRT performance trap: Switching to Windows Runtime too soon

Raymond Chen

Stay in the devirtualized world until you are forced to leave.

Feb 29, 2024
Post comments count 7
Post likes count 5

If a parameter isn’t used, what should I pass?

Raymond Chen

It doesn't matter what you pass, but if you have to ask, then just pass zero.

Feb 28, 2024
Post comments count 16
Post likes count 2

On the whole idea of giving away a reference to yourself at destruction

Raymond Chen

Hey, at least it's possible.

Feb 27, 2024
Post comments count 15
Post likes count 2

Mitigating attacks based on knowing the length of a Windows Hello PIN

Raymond Chen

Balancing convenience against security, and how you can tune the knobs toward more security.

Feb 26, 2024
Post comments count 21
Post likes count 1

A C# LINQ one-liner to check if exactly one of a set of conditions is met

Raymond Chen

Maybe not the most efficient, but it's easy to write.

Feb 23, 2024
Post comments count 4
Post likes count 4

Gotcha: Be careful how you shut down your dispatcher queues

Raymond Chen

The dispatcher queue thread isn't useful after it has shut down, so don't try anything.

Feb 22, 2024
Post comments count 1
Post likes count 1

Gotcha: Don’t forget to shut down your dispatcher queues

Raymond Chen

Keep that dispatcher queue controller around, or you'll never be able to clean up.

Feb 21, 2024
Post comments count 1
Post likes count 1

Once your object reaches final_release, you are committed to destructing it (eventually)

Raymond Chen

Don't try to resurrect it.

Feb 20, 2024
Post comments count 3
Post likes count 1

Microspeak: Closing out, duping out

Raymond Chen

Making work items no longer appear on a query.

Feb 19, 2024
Post comments count 9
Post likes count 5

Why can’t I trigger a manual blue screen crash by injecting the magic key sequence?

Raymond Chen

It has to come from the physical keyboard, because that's the code that detects the magic key sequence.

Feb 16, 2024
Post comments count 17
Post likes count 8

If you’re just going to sit there doing nothing, at least do nothing correctly

Raymond Chen

How to be inert.

Feb 15, 2024
Post comments count 3
Post likes count 8

Registered command lines are just command lines, not a programming language

Raymond Chen

If you want a programming language, you know where to find one.

Feb 14, 2024
Post comments count 6
Post likes count 4

Functions that return the size of a required buffer generally return upper bounds, not tight bounds

Raymond Chen

An over-estimate is better than an under-estimate.

Feb 13, 2024
Post comments count 3
Post likes count 3

It rather involved being on the other side of this airtight hatchway: Attacking a domain administrator from the local administrator

Raymond Chen

If you pwn the machine, then you pwn everyone on the machine.

Feb 12, 2024
Post comments count 1
Post likes count 3

How can I get the Windows Runtime HttpClient to display a basic authentication prompt?

Raymond Chen

You need to give it some help finding the right window.

Feb 9, 2024
Post comments count 25
Post likes count 12

On the virtues of the trailing comma

Raymond Chen

A more uniform appearance comes with its own benefits beyond aesthetics.

Feb 8, 2024
Post comments count 3
Post likes count 3

How do I suppress the error box that appears when a LoadLibrary fails?

Raymond Chen

They don't appear often, but they do appear occasionally.

Feb 7, 2024
Post comments count 4
Post likes count 2

Why doesn’t my program get fancy drag/drop effects in high contrast mode with CLSID_Drag­Drop­Helper?

Raymond Chen

You have to upgrade your manifest.

Feb 6, 2024
Post comments count 11
Post likes count 3

On using milliseconds as a measure of network latency

Raymond Chen

There's a limit to how much technology can improve.

Feb 5, 2024
Post comments count 1
Post likes count 4

How can I close a thread pool and cancel all work that had been queued to it?

Raymond Chen

You can put them in a group.

Feb 2, 2024
Post comments count 4
Post likes count 1

The case of the invalid parameter error from Measure­Override

Raymond Chen

Chasing it back to its origin.

Feb 1, 2024
Post comments count 7
Post likes count 2

Using virtual memory placeholders to allocate contiguous address space for multiple purposes

Raymond Chen

Can you hold this for a second?

Jan 31, 2024
Post comments count 10
Post likes count 2

How can I add an environment variable to a process launched via Shell­Execute­Ex or IContext­Menu?

Raymond Chen

Hooking into the way the Windows shell launches processes.

Jan 30, 2024
Post comments count 1
Post likes count 1

Smoothing over the differences (and defects) in the various implementations of IMemory­Buffer

Raymond Chen

Stick to the part that nobody messes up.

Jan 29, 2024
Post comments count 0
Post likes count 2

A comparison of various implementations of the Windows Runtime IMemory­Buffer

Raymond Chen

Every unhappy class is unhappy in its own way.

Jan 26, 2024
Post comments count 0
Post likes count 2

How can I expose a pre-existing block of memory as a Windows Runtime object without copying the data?

Raymond Chen

Assembling all the pieces.

Jan 25, 2024
Post comments count 8
Post likes count 1

How can I give away a COM reference just before my object destructs?

Raymond Chen

You have to do it before committing to destruction.

Jan 24, 2024
Post comments count 2
Post likes count 2

The dangerous implementations of the IMemory­Buffer­Reference.Closed event

Raymond Chen

Mistakenly handing out COM references that don't work.

Jan 23, 2024
Post comments count 1
Post likes count 2

The useless IMemory­Buffer­Reference.Closed event

Raymond Chen

It tells you that you have already lost.

Jan 22, 2024
Post comments count 0
Post likes count 3

Accessing a block of memory represented by a Windows Runtime IMemoryBuffer

Raymond Chen

Through the currency known as an IMemoryBufferReference.

Jan 19, 2024
Post comments count 2
Post likes count 1

The case of the fail-fast trying to log a caught exception

Raymond Chen

What is being thrown and why can't we log it?

Jan 18, 2024
Post comments count 0
Post likes count 2

Implementing two-phase initialization with ATL

Raymond Chen

ATL looks like it supports two-phase initialization, but it doesn't.

Jan 17, 2024
Post comments count 1
Post likes count 2

Getting a strong reference from the this pointer too soon

Raymond Chen

Giving out strong references to an object before you can guarantee that it will work.

Jan 16, 2024
Post comments count 4
Post likes count 9

What is a hard error, and what makes it harder than an easy error?

Raymond Chen

A throwback to the early days of 16-bit Windows.

Jan 15, 2024
Post comments count 5
Post likes count 2

C++/WinRT gotcha: Not all exceptions derive from hresult_error

Raymond Chen

There are also C++ standard exceptions, particularly <CODE>std::bad_alloc</CODE>.

Jan 12, 2024
Post comments count 1
Post likes count 2

In C++/WinRT, how can I await multiple coroutines and capture the results?, part 3

Raymond Chen

Dealing with awaitables that return <CODE>void</CODE>, and questioning our life choices.

Jan 11, 2024
Post comments count 0
Post likes count 3

In C++/WinRT, how can I await multiple coroutines and capture the results?, part 2

Raymond Chen

Wrapping the results and returning them in a tuple.

Jan 10, 2024
Post comments count 0
Post likes count 2

In C++/WinRT, how can I await multiple coroutines and capture the results?, part 1

Raymond Chen

Using a custom awaiter to suppress the <CODE>GetResults()</CODE>.

Jan 9, 2024
Post comments count 10
Post likes count 2

After I accidentally denied access to everyone, how do I get access back?

Raymond Chen

Congratulations, you locked your keys in the car.

Jan 8, 2024
Post comments count 0
Post likes count 2

How do I prevent my C++/WinRT implementation class from participating in COM aggregation?

Raymond Chen

Looking for a clue.

Jan 5, 2024
Post comments count 4
Post likes count 3

The case of the vector with an impossibly large size

Raymond Chen

Play threading games, win threading prizes.

Jan 4, 2024
Post comments count 9
Post likes count 4

How can I specify icons for my app to use on the Start menu in high contrast mode?

Raymond Chen

Put them in your manifest.

Jan 3, 2024
Post comments count 1
Post likes count 2

Why doesn’t my code compile when I change a shared_ptr<T>(p) to an equivalent make_shared<T>(p)?

Raymond Chen

It depends on who is doing the parameter conversion.

Jan 2, 2024
Post comments count 7
Post likes count 4

It rather involved being on the other side of this airtight hatchway: Attacking another program by modifying its memory

Raymond Chen

If you assume the existence of a vulnerability, you can use that vulnerability to attack something.

Jan 1, 2024
Post comments count 0
Post likes count 2

How do I prevent my ATL class from participating in COM aggregation? DECLARE_NOT_AGGREGATABLE didn’t work

Raymond Chen

That marker applies only to creation via the class factory.

Dec 29, 2023
Post comments count 8
Post likes count 4

2023 year-end link clearance

Raymond Chen

Ringing out another year.

Dec 29, 2023
Post comments count 2
Post likes count 4

How to allocate address space with a custom alignment or in a custom address region

Raymond Chen

Some new powers to guide the allocation.

Dec 28, 2023
Post comments count 1
Post likes count 4

On calling Afx­Connection­Advise with bAddRef set to FALSE

Raymond Chen

Playing fast and loose, and eventually you get burnt.

Dec 27, 2023
Post comments count 1
Post likes count 4

What does it mean when the compiler says that it can’t convert something to itself?

Raymond Chen

Why is it even thinking about a conversion?

Dec 26, 2023
Post comments count 1
Post likes count 9

Don’t keep state in your XAML item templates; put the state in the items

Raymond Chen

Beware of temporary alliances.

Dec 25, 2023
Post comments count 3
Post likes count 6

That time the Word team sent presents to the children of WordPerfect’s executive vice president

Raymond Chen

No, it wasn't creepy.

Dec 22, 2023
Post comments count 11
Post likes count 2

If I don’t have any items, what error should my IFolderView::Items method return?

Raymond Chen

It shouldn't return an error at all.

Dec 21, 2023
Post comments count 2
Post likes count 3

How do I get access to the wParam and lParam of the WM_QUERY­END­SESSION method from my MFC message handler?

Raymond Chen

Don't be afraid to see how the macros are built.

Dec 20, 2023
Post comments count 1
Post likes count 1

It rather involved being on the other side of this airtight hatchway: Spoofing another program

Raymond Chen

You already had the power to do it yourself.

Dec 19, 2023
Post comments count 1
Post likes count 1

Microspeak: Locked and loaded

Raymond Chen

Armed and ready, with the suggestion that no further changes will be needed (or accepted).

Dec 18, 2023
Post comments count 1
Post likes count 0

In 2023, the Gävle Goat faces a new threat to its survival

Raymond Chen

It's bock.

Dec 18, 2023
Post comments count 3
Post likes count 1

If the RegisterClass function takes ownership of the custom background brush, why is it leaking?

Raymond Chen

It takes ownership only on success.

Dec 15, 2023
Post comments count 2
Post likes count 1

How do I specify an optional string parameter to a Windows Runtime method?

Raymond Chen

Strings are sort of reference but sort of values.

Dec 14, 2023
Post comments count 1
Post likes count 1

How do I specify an optional parameter to a Windows Runtime method?

Raymond Chen

There is no way to express explicit optionality, but there are implicit ways.

Dec 13, 2023
Post comments count 0
Post likes count 2

How can I work around the absence of default parameters in the Windows Runtime?

Raymond Chen

You can fake it with overloads.

Dec 12, 2023
Post comments count 4
Post likes count 4

What happens if I define one environment variable in terms of the value of another environment variable?

Raymond Chen

Only certain types of dependencies are supported.

Dec 11, 2023
Post comments count 12
Post likes count 6

The mysterious second parameter to the x86 ENTER instruction

Raymond Chen

For an ABI that probably nobody uses.

Dec 8, 2023
Post comments count 6
Post likes count 3

A simpler version of the task sequencer that doesn’t promise fairness

Raymond Chen

Just let a kernel object control the access.

Dec 7, 2023
Post comments count 1
Post likes count 2

In C++, how can I make a default parameter be the this pointer of the caller?

Raymond Chen

Again, you can't, but you can fake it.

Dec 6, 2023
Post comments count 2
Post likes count 4

In C++, how can I make a member function default parameter depend on this?

Raymond Chen

You can't, but you can fake it.

Dec 5, 2023
Post comments count 6
Post likes count 8

What was the code name for 64-bit Windows?

Raymond Chen

Sundown, which was a hidden jab at the competition.

Dec 4, 2023
Post comments count 5
Post likes count 4

What is a static chain pointer in the context of calling convention ABI?

Raymond Chen

Buried in the System V Application Binary Interface.

Dec 1, 2023
Post comments count 6
Post likes count 3

Why does the Windows Portable Executable (PE) format have both an import section and input directory?

Raymond Chen

They seem to be the same thing. Do we need both?

Nov 30, 2023
Post comments count 2
Post likes count 5

Why does the Windows Portable Executable (PE) format have separate tables for import names and import addresses?, part 2

Raymond Chen

Keeping read-only data separate from read-write data.

Nov 29, 2023
Post comments count 6
Post likes count 4

Why does the Windows Portable Executable (PE) format have separate tables for import names and import addresses?, part 1

Raymond Chen

Even though their lifetimes don't overlap, you sometimes need to go back in time.

Nov 28, 2023
Post comments count 8
Post likes count 3

A reported vulnerability about getting paid apps for free is really about paying for free apps

Raymond Chen

Try shopping around.

Nov 27, 2023
Post comments count 3
Post likes count 5

In Windows 3.1 and Windows 95, what is a “grabber”?

Raymond Chen

It grabbed your MS-DOS screen and put it into a window.

Nov 24, 2023
Post comments count 10
Post likes count 11

On harmful overuse of std::move

Raymond Chen

Initial excitement leads to overuse.

Nov 23, 2023
Post comments count 0
Post likes count 2

On the need to keep most event sources alive if you want them to raise events

Raymond Chen

You can't receive a notification from something that doesn't exist.

Nov 22, 2023
Post comments count 1
Post likes count 5

How can I convert a Windows Runtime Software­Bitmap to a WIC bitmap?

Raymond Chen

The reverse of <CODE>ISoftware­Bitmap­Native­Factory::<WBR>Create­From­WIC­Bitmap</CODE>.

Nov 21, 2023
Post comments count 5
Post likes count 8

Microspeak revisited: Line of sight

Raymond Chen

A fancy way of saying unimpeded network connectivity.

Nov 20, 2023
Post comments count 0
Post likes count 3

If you’re going to crash on an unhandled exception, you may as well do it sooner rather than later

Raymond Chen

Avoiding the problem discovered by the case of the invalid argument exception from a method that takes no arguments.

Nov 17, 2023
Post comments count 0
Post likes count 3

The theory behind the IHttpFilter interface

Raymond Chen

Layering features on top of each other.

Nov 16, 2023
Post comments count 0
Post likes count 2

What happened to the custom exception description I threw from a C++/WinRT IAsyncAction?

Raymond Chen

The description is just a courtesy and is not part of the API contract.

Nov 15, 2023
Post comments count 2
Post likes count 2

Why does calling a coroutine allocate a lot of stack space even though the coroutine frame is on the heap?

Raymond Chen

Heap elision optimization kicks in, and doesn't kick out.

Nov 14, 2023
Post comments count 5
Post likes count 3

Starting on the other side of this airtight hatchway: Running a program that leaks memory

Raymond Chen

There are a lot of things you can do to consume memory.

Nov 13, 2023
Post comments count 2
Post likes count 4

What is the difference between UuidToString, StringFromCLSID, StringFromIID, and StringFromGUID2?

Raymond Chen

Different ways of stringizing a GUID.

Nov 10, 2023
Post comments count 2
Post likes count 2

The case of the invalid argument exception from a method that takes no arguments

Raymond Chen

Where did the invalid argument come from?

Nov 9, 2023
Post comments count 0
Post likes count 1

A clarification on the multithreading constraints of the Encrypt­Message function

Raymond Chen

Reading a sentence in the context of the whole paragraph.

Nov 8, 2023
Post comments count 0
Post likes count 1

How can I get information about media playing on the system, and optionally control their playback?

Raymond Chen

Going to the global system media transport controls world.

Nov 7, 2023
Post comments count 3
Post likes count 5

“Stop sharing this folder” is not the same as “Never share this folder”

Raymond Chen

It stops sharing the folder, but that doesn't prevent you from starting it again.

Nov 6, 2023
Post comments count 3
Post likes count 4

Why doesn’t reduction by modulo work for floating point values?

Raymond Chen

Working out why it works for integers and seeing what goes wrong.

Nov 3, 2023
Post comments count 1
Post likes count 5

Why does unsafe multithreaded use of an std::unordered_map crash more often than unsafe multithreaded use of a std::map?

Raymond Chen

It's all in the implementation details.

Nov 2, 2023
Post comments count 0
Post likes count 1

How come my custom exception message is lost when it is thrown from a IAsyncAction^?

Raymond Chen

Things that survive in the C++ world and things that are lost when you cross the ABI.

Nov 1, 2023
Post comments count 2
Post likes count 2

More notes on use of the DS_CONTROL style

Raymond Chen

Styles that have to go in, and styles that have to come out. (And styles that you can choose.)

Oct 31, 2023
Post comments count 9
Post likes count 3

What is the thread reaper?

Raymond Chen

Should you fear the thread reaper?

Oct 30, 2023
Post comments count 5
Post likes count 3

What are the dire consequences of not removing all the properties that were set via SetProp?

Raymond Chen

Not so much any more, but it could be a sign that you forgot something.

Oct 27, 2023
Post comments count 1
Post likes count 2

How to support a COM interface conditionally in WRL

Raymond Chen

Customizing the QueryInterface and GetIids methods.

Oct 26, 2023
Post comments count 0
Post likes count 3

How to support a COM interface conditionally in C++/WinRT

Raymond Chen

Prevent <CODE>winrt::implements</CODE> from responding to it or reporting it.

Oct 25, 2023
Post comments count 5
Post likes count 6

The format of icon resources, revisited

Raymond Chen

Filling in some gaps.

Oct 24, 2023
Post comments count 2
Post likes count 4

Why is there a hash of a weak password in the Windows cryptographic libraries?

Raymond Chen

They're part of an internal self-test.

Oct 23, 2023
Post comments count 2
Post likes count 4

How do I add a non-copyable, non-movable object to a std::map or std::unordered_map?

Raymond Chen

Fancy emplacement.

Oct 20, 2023
Post comments count 0
Post likes count 1

On the failed unrealized promise of Reg­Override­Predef­Key

Raymond Chen

An early attempt to sandbox the registry for a process.

Oct 19, 2023
Post comments count 3
Post likes count 2

What’s the difference between setting a page’s protection to PAGE_NOACCESS and freeing it?

Raymond Chen

Nobody can access it, but it's still there.

Oct 18, 2023
Post comments count 3
Post likes count 3

How can I check if I’m on a DispatcherQueue’s thread if I can’t call HasThreadAccess?

Raymond Chen

Looking at the tools you have available.

Oct 17, 2023
Post comments count 5
Post likes count 2

Microspeak: The As-Appropriate (AA) interviewer

Raymond Chen

So, how are things going so far?

Oct 16, 2023
Post comments count 9
Post likes count 3

API design principle: Reading a property or adding an event handler should not alter observable behavior

Raymond Chen

Don't punish people for looking.

Oct 13, 2023
Post comments count 0
Post likes count 2

On detecting improper use of std::enable_shared_from_this

Raymond Chen

Playing around with the standard library.

Oct 12, 2023
Post comments count 0
Post likes count 1

I created an overloaded operator for my C++/WinRT class, but it’s not working

Raymond Chen

Take a closer look at what you are overloading.

Oct 11, 2023
Post comments count 13
Post likes count 3

Why does IFileDialog still show non-filesystem folders when I pass FOS_FORCE­FILE­SYSTEM?

Raymond Chen

Because you need to pass through them to get there.

Oct 10, 2023
Post comments count 5
Post likes count 2

It rather required being on the other side of this airtight hatchway: Knowing the domain administrator password

Raymond Chen

If you give away the password, well, that's sort of on you.

Oct 9, 2023
Post comments count 2
Post likes count 2

Is there any performance advantage to marking a page read-only if I had no intention of writing to it anyway?

Raymond Chen

The CPU already figured it out.

Oct 6, 2023
Post comments count 2
Post likes count 1

A very belated improvement to the filtering of the Browse for Folder dialog so it shows only drive letters

Raymond Chen

The case of the very short UNC.

Oct 5, 2023
Post comments count 2
Post likes count 1

How can I get WideCharToMultiByte to convert strings encoded in UTF-16BE?

Raymond Chen

You first have to get it into a format the WideCharToMultiByte accepts.

Oct 4, 2023
Post comments count 3
Post likes count 2

On the confusing names for the Windows service SID types

Raymond Chen

Too much abbreviation.

Oct 3, 2023
Post comments count 1
Post likes count 6

A complaint about Links the Cat, the Office assistant

Raymond Chen

Do all cats do that?

Oct 2, 2023
Post comments count 0
Post likes count 1

How do I manually update a remote tracking branch, say, to undo a fetch?

Raymond Chen

Updating refs to point to whatever you like.

Sep 29, 2023
Post comments count 0
Post likes count 1

Template meta-programming: Avoiding saying a type before it is complete

Raymond Chen

Deferring use until after the class is defined.

Sep 28, 2023
Post comments count 2
Post likes count 2

C++/WinRT gotcha: get_strong() will produce a broken strong reference if destruction has already begun

Raymond Chen

A strong reference to nothing.

Sep 27, 2023
Post comments count 4
Post likes count 3

The dangers of releasing the last strong reference from within its own callback

Raymond Chen

Deadlocking with yourself.

Sep 26, 2023
Post comments count 8
Post likes count 6

Why is kernel32.dll running in user mode and not kernel mode, like its name implies?

Raymond Chen

It's just a name, and it comes from the days before user-mode/kernel-mode separation.

Sep 25, 2023
Post comments count 1
Post likes count 3

GetQueueStatus and the queue state

Raymond Chen

There's stuff going on that's hiding behind the innocuous-looking name.

Sep 22, 2023
Post comments count 3
Post likes count 6

When I try to call an exported function, the target crashes when it tries to call any Windows function

Raymond Chen

Using what you know about how functions are imported to construct a theory that matches the evidence.

Sep 21, 2023
Post comments count 9
Post likes count 8

How does Explorer calculate the “Date” of a file?

Raymond Chen

Mapping the generic concept to specific file types.

Sep 20, 2023
Post comments count 1
Post likes count 1

Why does my C++/WinRT project get unresolved externals for constructors?

Raymond Chen

You forgot to include the namespace header file, didn't you.

Sep 19, 2023
Post comments count 3
Post likes count 3

Why did the 16-bit _lopen and _lcreat function return -1 on failure instead of 0?

Raymond Chen

Trying to look like somebody else.

Sep 18, 2023
Post comments count 3
Post likes count 5

When looking to free up disk space, don’t forget your symbol file caches

Raymond Chen

They go all over the place.

Sep 15, 2023
Post comments count 6
Post likes count 2

How can I prevent myself from using a parameter after I’ve extracted all value from it?

Raymond Chen

You can shadow it with something useless.

Sep 14, 2023
Post comments count 7
Post likes count 3

I accidentally performed an operation on INVALID_HANDLE_VALUE, and it worked: What just happened?

Raymond Chen

Coincidentally valid, but not what you think.

Sep 13, 2023
Post comments count 1
Post likes count 2

How do I perform a case-insensitive comparison of two strings in the Deseret script?

Raymond Chen

It sort of depends on why you're comparing them.

Sep 12, 2023
Post comments count 4
Post likes count 3

The odd cadence of narrative engineering design documents

Raymond Chen

Following the rubric off a cliff.

Sep 11, 2023
Post comments count 27
Post likes count 8

Any sufficiently advanced uninstaller is indistinguishable from malware

Raymond Chen

The common pattern of trying to delete yourself.

Sep 8, 2023
Post comments count 3
Post likes count 4

On transferring or copying ABI pointers between smart pointers

Raymond Chen

Keep track of who owns the reference.

Sep 7, 2023
Post comments count 1
Post likes count 1

A freestanding JavaScript function that uses this is easily mistaken for a constructor

Raymond Chen

Because that's what constructors look like.

Sep 6, 2023
Post comments count 2
Post likes count 2

Detecting whether a tree-like data structure contains a cycle

Raymond Chen

Combining two things we already know.

Sep 5, 2023
Post comments count 2
Post likes count 1

When documentation cautions that something may not happen, that suggests that it normally does happen

Raymond Chen

Reading between the lines.

Sep 4, 2023
Post comments count 9
Post likes count 3

Just for fun: What happens when you shift a register by more than the register size?

Raymond Chen

A comparative study of processor architectures.

Sep 1, 2023
Post comments count 0
Post likes count 1

How do I find out more about the fail-fast exception that occurs when an exception in a PPL task goes unobserved?

Raymond Chen

Digging into the internals.

Aug 31, 2023
Post comments count 0
Post likes count 3

Diagnosing a crash when trying to call ReadFile via language interop

Raymond Chen

Checking the signatures and inferring what could have gone wrong.

Aug 30, 2023
Post comments count 2
Post likes count 5

How can I programmatically obtain the value of the “Make text bigger” slider?

Raymond Chen

The text scale factor property.

Aug 29, 2023
Post comments count 10
Post likes count 3

The popularity of DOS/4GW made Windows 95 game compatibility a little easier, but with higher stakes

Raymond Chen

A popular path to protected mode.

Aug 28, 2023
Post comments count 4
Post likes count 3

Just for fun: Which processors prefer sign-extended loads, and which prefer zero-extended loads?

Raymond Chen

Another pointless chart.

Aug 25, 2023
Post comments count 3
Post likes count 2

On writing loops in continuation-passing style, part 4

Raymond Chen

Equivalents in C# and JavaScript.

Aug 24, 2023
Post comments count 0
Post likes count 2

On writing loops in PPL and continuation-passing style, part 3

Raymond Chen

Explicit shared state.

Aug 23, 2023
Post comments count 0
Post likes count 2

On writing loops in PPL and continuation-passing style, part 2

Raymond Chen

Recursion comes back.

Aug 22, 2023
Post comments count 0
Post likes count 2

On writing loops in PPL and continuation-passing style, part 1

Raymond Chen

Keeping track of what to do next.

Aug 21, 2023
Post comments count 7
Post likes count 3

Inside STL: The different types of shared pointer control blocks

Raymond Chen

Well, some of them, at least.

Aug 18, 2023
Post comments count 1
Post likes count 2

Phantom and indulgent shared pointers

Raymond Chen

The phantom controls something yet holds nothing. The indulgent holds something but controls nothing.

Aug 17, 2023
Post comments count 1
Post likes count 2

What it means when you convert between different shared_ptrs

Raymond Chen

Changing the pointer while controlling the same object.

Aug 16, 2023
Post comments count 1
Post likes count 4

Inside STL: The shared_ptr constructor and enable_shared_from_this

Raymond Chen

Working together through a secret signal.

Aug 15, 2023
Post comments count 7
Post likes count 2

Inside STL: The shared_ptr constructor vs make_shared

Raymond Chen

Where to hide the control block.

Aug 14, 2023
Post comments count 4
Post likes count 6

Inside STL: Smart pointers

Raymond Chen

Simple pointers or more complicated pointers.

Aug 11, 2023
Post comments count 0
Post likes count 5

Inside STL: The array

Raymond Chen

It's just an array.

Aug 10, 2023
Post comments count 3
Post likes count 5

Inside STL: The deque, implementation

Raymond Chen

An array of (pointers to) arrays.

Aug 9, 2023
Post comments count 2
Post likes count 7

Inside STL: The deque, design

Raymond Chen

An array of (pointers to) arrays.

Aug 8, 2023
Post comments count 1
Post likes count 8

Inside STL: The unordered_map, unordered_set, unordered_multimap, and unordered_multiset

Raymond Chen

A hash table.

Aug 7, 2023
Post comments count 6
Post likes count 5

Inside STL: The map, set, multimap, and multiset

Raymond Chen

A red-black tree.

Aug 4, 2023
Post comments count 3
Post likes count 7

Inside STL: The lists

Raymond Chen

Your traditional singly- or doubly-linked list.

Aug 3, 2023
Post comments count 6
Post likes count 9

Inside STL: The string

Raymond Chen

An allocation, with a twist.

Aug 2, 2023
Post comments count 6
Post likes count 7

Inside STL: The vector

Raymond Chen

A contiguous memory block, reallocated as necessary.

Aug 1, 2023
Post comments count 7
Post likes count 8

Inside STL: The pair and the compressed pair

Raymond Chen

Two fields in one object, how hard can it be?

Jul 31, 2023
Post comments count 4
Post likes count 4

Misinterpreting the misleadingly-named STATUS_STACK_BUFFER_OVERRUN

Raymond Chen

The subcode tells you why we stopped executing, and it's rarely because of a stack buffer overflow.

Jul 28, 2023
Post comments count 1
Post likes count 1

How to split off an older copy of a file while preserving git line history

Raymond Chen

Variation on a theme.

Jul 27, 2023
Post comments count 0
Post likes count 1

Perfect forwarding forwards objects, not braced things that are trying to become objects

Raymond Chen

Before you can forward something, it needs to be a something.

Jul 26, 2023
Post comments count 0
Post likes count 2

On the various ways of creating Windows Runtime delegates in C++/WinRT and C++/CX

Raymond Chen

Comparing and contrasting.

Jul 25, 2023
Post comments count 7
Post likes count 34

Before you try to do something, make sure you can do nothing

Raymond Chen

If you can't do nothing, then don't expect to be able to do something.

Jul 24, 2023
Post comments count 0
Post likes count 2

Why does IAsyncAction or IAsyncOperation.GetResults() produce a E_ILLEGAL_METHOD_CALL exception?

Raymond Chen

You're asking too soon.

Jul 21, 2023
Post comments count 0
Post likes count 1

How to clone a Windows Runtime map in the face of possible concurrent modification, part 3

Raymond Chen

Doing it one more time, for C++/CX.

Jul 20, 2023
Post comments count 0
Post likes count 1

How to clone a Windows Runtime map in the face of possible concurrent modification, part 2

Raymond Chen

Applying what we learned about vectors.

Jul 19, 2023
Post comments count 0
Post likes count 1

How to clone a Windows Runtime map in the face of possible concurrent modification, part 1

Raymond Chen

Applying what we learned about vectors.

Jul 18, 2023
Post comments count 0
Post likes count 1

How to clone a Windows Runtime vector in the face of possible concurrent modification, part 4

Raymond Chen

Translating to C++/CX and dealing with some quirks of that language.

Jul 17, 2023
Post comments count 0
Post likes count 1

Cloning a Windows Runtime vector in the face of possible concurrent modification, denial of service?

Raymond Chen

Can you get sent into an infinite loop?

Jul 14, 2023
Post comments count 0
Post likes count 1

How to clone a Windows Runtime vector in the face of possible concurrent modification, part 3

Raymond Chen

Dealing with the pesky <CODE>std::vector<bool></CODE>.

Jul 13, 2023
Post comments count 0
Post likes count 1

How to clone a Windows Runtime vector in the face of possible concurrent modification, part 2

Raymond Chen

Trying to make a generic solution.

Jul 12, 2023
Post comments count 2
Post likes count 1

How to clone a Windows Runtime vector in the face of possible concurrent modification, part 1

Raymond Chen

Backing off and retrying, but the detection is the tricky part.

Jul 11, 2023
Post comments count 0
Post likes count 2

Why does the compiler complain about a missing constructor when I’m just resizing my std::vector to a smaller size?

Raymond Chen

The compiler doesn't know that you're shrinking.

Jul 10, 2023
Post comments count 1
Post likes count 2

How to wait for multiple C++ coroutines to complete before propagating failure, concluding remarks

Raymond Chen

The things that could go wrong before you even start.

Jul 7, 2023
Post comments count 1
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, finding the awaiter

Raymond Chen

Making sure to wrap the right thing.

Jul 6, 2023
Post comments count 0
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, wrapping the awaitable

Raymond Chen

Intercepting the exception on the front side.

Jul 5, 2023
Post comments count 2
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, preallocating the coroutine frame

Raymond Chen

Avoiding dynamic memory allocation.

Jul 4, 2023
Post comments count 2
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, memory allocation failure

Raymond Chen

There's no good way to report the failure, so we just have to give up.

Jul 3, 2023
Post comments count 0
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, symmetric transfer

Raymond Chen

Avoiding stack build-up.

Jun 30, 2023
Post comments count 3
Post likes count 3

2023 mid-year link clearance

Raymond Chen

The tradition continues.

Jun 30, 2023
Post comments count 1
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, custom promise

Raymond Chen

Taking things into our own hands.

Jun 29, 2023
Post comments count 0
Post likes count 2

How to wait for multiple C++ coroutines to complete before propagating failure, peeling away at a tuple

Raymond Chen

Iterating over a tuple recursively.

Jun 28, 2023
Post comments count 1
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, false hope

Raymond Chen

Trying to iterate over a pack.

Jun 27, 2023
Post comments count 0
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, unhelpful lambda

Raymond Chen

The usual trick doesn't work.

Jun 26, 2023
Post comments count 5
Post likes count 1

How to wait for multiple C++ coroutines to complete before propagating failure, initial plunge

Raymond Chen

Remembering the exception while finishing the other work.

Jun 23, 2023
Post comments count 5
Post likes count 4

What can go wrong if you release an SRWLock from a thread different from the one that acquired it?

Raymond Chen

It's not a supported scenario, so anything can happen.

Jun 22, 2023
Post comments count 1
Post likes count 1

How can I find out the last time a user logged on from C++?

Raymond Chen

The information is in the historically-named LANMAN APIs.

Jun 21, 2023
Post comments count 0
Post likes count 3

The case of the make_shared on a C++/WinRT type

Raymond Chen

Now you can't tell who's in charge.

Jun 20, 2023
Post comments count 2
Post likes count 2

Why is Windows using only even-numbered processors?

Raymond Chen

Spreading out the load over cores.

Jun 19, 2023
Post comments count 6
Post likes count 2

Why am I being told about a signed/unsigned comparison, and why only sometimes, and how can I fix it?

Raymond Chen

How the compiler back-end can influence warnings.

Jun 16, 2023
Post comments count 0
Post likes count 2

The case of the invalid handle despite being managed by an RAII type, part 2

Raymond Chen

Avoiding using an object after is has destructed, and maybe using a less-well-known corner of the C++ language.

Jun 15, 2023
Post comments count 0
Post likes count 2

The case of the invalid handle despite being managed by an RAII type

Raymond Chen

The handle remains valid for the object's lifetime, but what is the object's lifetime?

Jun 14, 2023
Post comments count 3
Post likes count 1

How expensive is it to create a Windows performance counter?

Raymond Chen

The cost depends on the performance counter.

Jun 13, 2023
Post comments count 2
Post likes count 2

SIDs are really just another a fancy way of creating unique IDs in a decentralized way

Raymond Chen

Keeping them from colliding with each other.

Jun 12, 2023
Post comments count 4
Post likes count 2

The move constructor that you have to declare, even though you don’t want anyone to actually call it

Raymond Chen

Forcing named return value optimization.

Jun 9, 2023
Post comments count 4
Post likes count 2

Reordering C++ template type parameters for usability purposes, and type deduction from the future

Raymond Chen

You want them to go first, but you also want to deduce them.

Jun 8, 2023
Post comments count 8
Post likes count 2

How can I register a program to auto-relaunch if it crashes or is terminated?, redux

Raymond Chen

You can get a little bit of the way there.