What do all the recent NTDDI_VERSION values mean?
• 1 min read
If you’ve looked through semi-recent Windows SDK headers, you might’ve noticed preprocessor directives such as this:
#if (NTDDI_VERSION >= NTDDI_WIN10_CU)
But what does NTDDI_WIN10_CU
mean in this context? Google isn’t much help, and
Microsoft’s own documentation
is conspicuously missing these more recent macros:
NTDDI_WIN10_VB
NTDDI_WIN10_MN
NTDDI_WIN10_FE
NTDDI_WIN10_CO
NTDDI_WIN10_NI
NTDDI_WIN10_CU
NTDDI_WIN11_ZN
NTDDI_WIN11_GA
NTDDI_WIN11_GE
You may recognise some of those suffixes as chemical elements. And, in fact,
they all are apart from VB
. (VB
is apparently
Vibranium, used as a substitute for
chromium to avoid confusion.1)
What Windows version those chemical elements relate to can be found from a list of Windows code names on Wikipedia (as well as from other sources). (Note that some of the chemical elements don’t refer to stable versions of Windows.)
If you want to know what Windows 10 or 11 version a function, interface or
similar became available in, however, trying to go off the NTDDI_VERSION
preprocessor directive used doesn’t always give you the correct answer in my
experience – I’ve found that the relevant bit of documentation on
learn.microsoft.com is usually a better
guide2.
(On that last point, dwrite_3.h
currently contains this gem:
#if NTDDI_VERSION >= NTDDI_WIN10_CU // TODO - set correct DDI version
)
Footnotes
-
When the documentation is actually available. Some newer DirectWrite interfaces are only documented for DWriteCore, for some reason. ↩