# Old New Thing

Published articles for Old New Thing.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Why do Microsoft job levels start in the high 50's instead of starting at a sane number like 1?

DevFeed: [Why do Microsoft job levels start in the high 50's instead of starting at a sane number like 1?](<https://devfeed.tech/articles/why-do-microsoft-job-levels-start-in-the-high-50-s-instead-of-starting-at-a-sane-number-like-1-31556.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260915-00/?p=112700>)

Author: Raymond Chen

Published: 2026-09-15T14:00:00Z

Content type: opinion

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [Job](<https://devfeed.tech/topics/job.md>), [Microsoft](<https://devfeed.tech/topics/microsoft.md>)

Tags: [job](<https://devfeed.tech/tags/job.md>), [microsoft](<https://devfeed.tech/tags/microsoft.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [other](<https://devfeed.tech/tags/other.md>)

### AI overview

The article explains why Microsoft's job levels start in the high 50s. Microsoft renumbered its career levels after dividing broad levels into smaller steps, avoiding confusion between old and new level numbers.

### Source excerpt

It used to start at 1, but that was the old system. The post Why do Microsoft job levels start in the high 50's instead of starting at a sane number like 1? appeared first on The Old New Thing.

## Why didn't ReadDirectoryChangesW provide a way to correlate the two sides of a rename operation?

DevFeed: [Why didn't ReadDirectoryChangesW provide a way to correlate the two sides of a rename operation?](<https://devfeed.tech/articles/why-didn-t-read-directory-changesw-provide-a-way-to-correlate-the-two-sides-of-a-rename-operation-21762.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260914-00/?p=112696>)

Author: Raymond Chen

Published: 2026-09-14T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [Filesystems](<https://devfeed.tech/topics/filesystems.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [concurrent](<https://devfeed.tech/tags/concurrent.md>), [events](<https://devfeed.tech/tags/events.md>), [files](<https://devfeed.tech/tags/files.md>), [ids](<https://devfeed.tech/tags/ids.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [information](<https://devfeed.tech/tags/information.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [other](<https://devfeed.tech/tags/other.md>), [post](<https://devfeed.tech/tags/post.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

The article explains why ReadDirectoryChangesW did not explicitly provide a mechanism for correlating the two events generated by a file rename. It suggests that the events were expected to occur consecutively, but that assumption was never documented and could fail when concurrent renames or disk activity interleave events. File IDs provide the information needed to correlate the two sides reliably.

### Source excerpt

Perhaps it wasn't necessary, or perhaps it didn't occur to them that this a problem. The post Why didn't <CODE>ReadDirectoryChangesW</CODE> provide a way to correlate the two sides of a rename operation? appeared first on The Old New Thing.

## Why is the x86 undefined instruction called ud2? Why 2?

DevFeed: [Why is the x86 undefined instruction called ud2? Why 2?](<https://devfeed.tech/articles/why-is-the-x86-undefined-instruction-called-ud2-why-2-21760.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260910-00/?p=112689>)

Author: Raymond Chen

Published: 2026-09-10T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [x86](<https://devfeed.tech/topics/x86.md>), [Assembly](<https://devfeed.tech/topics/assembly.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Exception](<https://devfeed.tech/topics/exception.md>), [intel](<https://devfeed.tech/topics/intel.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [exception](<https://devfeed.tech/tags/exception.md>), [intel](<https://devfeed.tech/tags/intel.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [other](<https://devfeed.tech/tags/other.md>), [processor](<https://devfeed.tech/tags/processor.md>), [x86](<https://devfeed.tech/tags/x86.md>)

### AI overview

The article explains why the x86 undefined instruction is called ud2. It describes how software used byte sequences that reliably raised an invalid opcode exception, how Intel later provided a standardized instruction, and how compiler output can use it to mark unreachable code and cause a deliberate crash.

### Source excerpt

It came after ud0 and ud1. The post Why is the x86 undefined instruction called <CODE>ud2</CODE>? Why 2? appeared first on The Old New Thing.

## What algorithm did Windows XP use to choose your initial user picture?

DevFeed: [What algorithm did Windows XP use to choose your initial user picture?](<https://devfeed.tech/articles/what-algorithm-did-windows-xp-use-to-choose-your-initial-user-picture-21759.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260909-00/?p=112683>)

Author: Raymond Chen

Published: 2026-09-09T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [Randomizer](<https://devfeed.tech/topics/randomizer.md>), [Windows](<https://devfeed.tech/topics/windows.md>), [Filesystems](<https://devfeed.tech/topics/filesystems.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [files](<https://devfeed.tech/tags/files.md>), [history](<https://devfeed.tech/tags/history.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [random](<https://devfeed.tech/tags/random.md>), [recursion](<https://devfeed.tech/tags/recursion.md>), [windows](<https://devfeed.tech/tags/windows.md>)

### AI overview

The article explains that Windows XP selected an initial user picture randomly from the Default Pictures directory using the current time as the random seed. It describes a one-pass reservoir-sampling algorithm, including its efficiency and behavior when files change during selection, with a 100-picture safety limit.

### Source excerpt

It's random, really. The post What algorithm did Windows XP use to choose your initial user picture? appeared first on The Old New Thing.

## A sample use of the winstart.bat file in Windows 95

DevFeed: [A sample use of the winstart.bat file in Windows 95](<https://devfeed.tech/articles/a-sample-use-of-the-winstart-bat-file-in-windows-95-21758.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260908-00/?p=112679>)

Author: Raymond Chen

Published: 2026-09-08T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [Windows](<https://devfeed.tech/topics/windows.md>), [Batch file](<https://devfeed.tech/topics/batch-file.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [display](<https://devfeed.tech/tags/display.md>), [driver](<https://devfeed.tech/tags/driver.md>), [drivers](<https://devfeed.tech/tags/drivers.md>), [graphics](<https://devfeed.tech/tags/graphics.md>), [history](<https://devfeed.tech/tags/history.md>), [multitasking](<https://devfeed.tech/tags/multitasking.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [post](<https://devfeed.tech/tags/post.md>), [windows](<https://devfeed.tech/tags/windows.md>)

### AI overview

The article explains a sample use of winstart.bat in Windows 95: starting the TIGA Communications Driver so 16-bit Windows can use high-resolution graphics modes. It notes that MS-DOS programs could not use TIGA modes and that multitasking TIGA graphics across Windows and MS-DOS sessions was unsupported.

### Source excerpt

For a driver that needs high resolution mode only in Windows. The post A sample use of the <CODE>winstart.bat</CODE> file in Windows 95 appeared first on The Old New Thing.

## Why don't we allow stacks to be sparse, instead of forcing them to be contiguous?

DevFeed: [Why don't we allow stacks to be sparse, instead of forcing them to be contiguous?](<https://devfeed.tech/articles/why-don-t-we-allow-stacks-to-be-sparse-instead-of-forcing-them-to-be-contiguous-21757.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260907-00/?p=112677>)

Author: Raymond Chen

Published: 2026-09-07T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [Vulnerabilities](<https://devfeed.tech/topics/vulnerabilities.md>), [Security](<https://devfeed.tech/topics/security.md>), [x86](<https://devfeed.tech/topics/x86.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [security](<https://devfeed.tech/tags/security.md>), [security-vulnerabilities](<https://devfeed.tech/tags/security-vulnerabilities.md>), [vulnerabilities](<https://devfeed.tech/tags/vulnerabilities.md>), [x86](<https://devfeed.tech/tags/x86.md>)

### AI overview

The article explains why stacks are generally kept contiguous rather than made sparse. It discusses the need for explicit stack-limit checks to prevent stack guard-page hopping, the difficulty of reporting failures when a page in the middle of a stack cannot be committed, and possible changes to x86-32 stack probing to avoid unnecessary page-ins.

### Source excerpt

Imagining how to report a memory allocation failure for a sparse page. The post Why don't we allow stacks to be sparse, instead of forcing them to be contiguous? appeared first on The Old New Thing.

## What happens if you change a window class's GCL\_CBWNDEXTRA?

DevFeed: [What happens if you change a window class's GCL\_CBWNDEXTRA?](<https://devfeed.tech/articles/what-happens-if-you-change-a-window-class-s-gcl-cb-wnd-extra-21756.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260904-00/?p=112675>)

Author: Raymond Chen

Published: 2026-09-04T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [Windows](<https://devfeed.tech/topics/windows.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [post](<https://devfeed.tech/tags/post.md>), [windows](<https://devfeed.tech/tags/windows.md>)

### AI overview

The article explains that changing a window class's extra-byte size affects only windows created afterward. Existing windows retain the size assigned at creation, and accessing bytes that were not available then can produce an out-of-range result.

### Source excerpt

You're changing the value for future windows. The post What happens if you change a window class's <CODE>GCL_<WBR>CBWNDEXTRA</CODE>? appeared first on The Old New Thing.

## The case of the progress callback that never got called when progress happened

DevFeed: [The case of the progress callback that never got called when progress happened](<https://devfeed.tech/articles/the-case-of-the-progress-callback-that-never-got-called-when-progress-happened-21755.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260903-00/?p=112672>)

Author: Raymond Chen

Published: 2026-09-03T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [debugging](<https://devfeed.tech/topics/debugging.md>), [C#](<https://devfeed.tech/topics/csharp.md>), [debug](<https://devfeed.tech/topics/debug.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [breakpoint](<https://devfeed.tech/tags/breakpoint.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [code](<https://devfeed.tech/tags/code.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [handler](<https://devfeed.tech/tags/handler.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [providers](<https://devfeed.tech/tags/providers.md>)

### AI overview

A progress callback is never invoked because an intermediary method returns its own operation without forwarding progress reports from the provider's underlying operation. The suggested fix is to return the provider's operation directly so callers can attach to its progress.

### Source excerpt

Are you talking to the right guy? The post The case of the progress callback that never got called when progress happened appeared first on The Old New Thing.

## The perils of binding to value types in XAML

DevFeed: [The perils of binding to value types in XAML](<https://devfeed.tech/articles/the-perils-of-binding-to-value-types-in-xaml-21754.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260902-00/?p=112668>)

Author: Raymond Chen

Published: 2026-09-02T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [XAML](<https://devfeed.tech/topics/xaml.md>), [data](<https://devfeed.tech/topics/data.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>)

Tags: [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [code](<https://devfeed.tech/tags/code.md>), [data](<https://devfeed.tech/tags/data.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [xaml](<https://devfeed.tech/tags/xaml.md>)

### AI overview

The article explains how binding XAML controls to value-type data models can break navigation through assistive technology because XAML receives copies rather than the same object identity. It recommends using a C++/WinRT runtime class and notes that Windows Implementation Library helpers can reduce implementation boilerplate.

### Source excerpt

Loss of identity. The post The perils of binding to value types in XAML appeared first on The Old New Thing.

## Microspeak: Funded / unfunded

DevFeed: [Microspeak: Funded / unfunded](<https://devfeed.tech/articles/microspeak-funded-unfunded-21753.md>)

Original publisher: [Read original article](<https://devblogs.microsoft.com/oldnewthing/20260901-00/?p=112662>)

Author: Raymond Chen

Published: 2026-09-01T14:00:00Z

Content type: article

Language: en

Sources: [Raymond Chen](<https://devfeed.tech/sources/raymond-chen.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>), [Microsoft](<https://devfeed.tech/topics/microsoft.md>)

Tags: [developer](<https://devfeed.tech/tags/developer.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [funding](<https://devfeed.tech/tags/funding.md>), [microspeak](<https://devfeed.tech/tags/microspeak.md>), [old-new-thing](<https://devfeed.tech/tags/old-new-thing.md>), [other](<https://devfeed.tech/tags/other.md>)

### AI overview

This article explains Microsoft's use of "funding" as shorthand for having enough people available to work on a feature. It distinguishes funded, partially funded, and unfunded features, and describes how staffing gaps can delay releases without meaning a feature has been canceled.

### Source excerpt

People are our most valuable asset. The post Microspeak: Funded / unfunded appeared first on The Old New Thing.