The Old New Thing

Practical development throughout the evolution of Windows.

Latest posts

How can I convert a third party in-process server so it runs in the COM surrogate?
Sep 12, 2025
Post comments count 2
Post likes count 2

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

Raymond Chen
Raymond Chen

You can put your own object in the surrogate first.

Why can’t <CODE>std::apply</CODE> figure out which overload I intend to use? Only one of then will work!
Sep 11, 2025
Post comments count 2
Post likes count 0

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

Raymond Chen
Raymond Chen

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

The documentation says that CompanyName version information is required, but my program seems to work without it, so how required is it?
Sep 10, 2025
Post comments count 7
Post likes count 2

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

Raymond Chen
Raymond Chen

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

A suggestion to people who assign nicknames to meeting rooms
Sep 9, 2025
Post comments count 9
Post likes count 1

A suggestion to people who assign nicknames to meeting rooms

Raymond Chen
Raymond Chen

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

Why didn’t Windows 95 simply special-case the laptops that locked up when it executed the <CODE>HLT</CODE> instruction?
Sep 8, 2025
Post comments count 14
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
Raymond Chen

The catastrophic risk of bricking a computer.

The case of the crash on a null pointer even though we checked it for null
Sep 5, 2025
Post comments count 1
Post likes count 1

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

Raymond Chen
Raymond Chen

Understanding what you're checking.

How can I write a C++/WinRT <CODE>IAsyncOperation<T></CODE> where <CODE>T</CODE> is not a Windows Runtime type?, part 2
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
Raymond Chen

Safer smuggling.

How can I write a C++/WinRT <CODE>IAsyncOperation<T></CODE> where <CODE>T</CODE> is not a Windows Runtime type?, part 1
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
Raymond Chen

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

Dubious security vulnerability: Remembering passwords for recently-opened ZIP files
Sep 2, 2025
Post comments count 7
Post likes count 1

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

Raymond Chen
Raymond Chen

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