【VS2026】_WIN32_WINNT 宏版本列表
_WIN32_WINNT 完整版本对照表
_WIN32_WINNT用于指定目标 Windows 系统最低版本,头文件<sdkddkver.h>定义,编译时定义该宏会启用对应系统API、禁用低版本不兼容接口。
一、数值与系统对应(从旧到新)
| _WIN32_WINNT 宏值 | 十进制 | 对应操作系统 | 备注 |
|---|---|---|---|
| _WIN32_WINNT_WIN2K | 0x0500 | Windows 2000 | 最低NT5系列 |
| _WIN32_WINNT_WINXP | 0x0501 | Windows XP / Windows Server 2003 | XP 通用 |
| _WIN32_WINNT_WS03 | 0x0502 | Windows Server 2003 / Windows XP x64 | 64位XP、2003服务器 |
| _WIN32_WINNT_VISTA | 0x0600 | Windows Vista / Server 2008 | NT6.0 |
| _WIN32_WINNT_WIN7 | 0x0601 | Windows 7 / Server 2008 R2 | NT6.1 |
| _WIN32_WINNT_WIN8 | 0x0602 | Windows 8 / Server 2012 | NT6.2 |
| _WIN32_WINNT_WINBLUE | 0x0603 | Windows 8.1 / Server 2012 R2 | NT6.3 |
| _WIN32_WINNT_WIN10 | 0x0A00 | Windows 10 / Windows 11 | NT10,所有Win10/11共用此基础值 |
二、Win10/Win11 细分版本(搭配 NTDDI_VERSION 使用)
_WIN32_WINNT_WIN10 (0x0A00)仅代表NT10大版本,区分Win10不同功能更新、Win11 需要NTDDI_VERSION:
// Win10 各版本 NTDDINTDDI_WIN10_TH2=0x0A000002// 1511NTDDI_WIN10_RS1=0x0A000003// 1607NTDDI_WIN10_RS2=0x0A000004// 1703NTDDI_WIN10_RS3=0x0A000005// 1709NTDDI_WIN10_RS4=0x0A000006// 1803NTDDI_WIN10_RS5=0x0A000007// 1809NTDDI_WIN10_19H1=0x0A000008// 1903NTDDI_WIN10_VB=0x0A000009// 1909NTDDI_WIN10_20H1=0x0A00000A// 2004/20H2NTDDI_WIN10_21H2=0x0A00000C// Win10 21H2NTDDI_WIN11=0x0A00000D// Win11 21H2NTDDI_WIN11_22H2=0x0A00000E// Win11 22H2NTDDI_WIN11_23H2=0x0A00000F// Win11 23H2NTDDI_WIN11_24H2=0x0A000010// Win11 24H2三、使用示例
1. 编译目标 Windows 7
#define_WIN32_WINNT_WIN32_WINNT_WIN7#include<windows.h>等价直接写数值:
#define_WIN32_WINNT0x06012. 目标 Win10/Win11
#define_WIN32_WINNT_WIN32_WINNT_WIN10#defineNTDDI_VERSIONNTDDI_WIN11_22H2#include<windows.h>四、配套相关宏说明
WINVER:和_WIN32_WINNT保持一致,控制老版本UI接口,建议同步定义#defineWINVER_WIN32_WINNT_WIN32_IE:控制IE/Shell API版本,独立于系统版本NTDDI_VERSION:细分子系统更新版本,高精度API(如新版DirectX、窗口、进程接口)依赖此宏
五、常见坑
- 宏必须放在所有Windows头文件最前面定义,否则不生效;
- 若定义版本高于运行系统,调用新版API会运行时崩溃(需动态LoadLibrary兼容);
- VS新版SDK默认目标Win10/11,老项目默认0x0601(Win7);
- 不存在独立
_WIN32_WINNT_WIN11,Win11 大版本仍为0x0A00,靠NTDDI区分。
