本帖最后由 王之能够21wz 于 2026-8-16 22:51 编辑
点击目录切换
不受程序兼容模式欺骗,可以拿到真实 Windows 版本汇编版 未来 Windows 更新理论上可能修改偏移导致判断失效
Win10‑Win11 判断靠 Build 号 24000 分界线
Windows 11 最低内部版本就是 22000
函数原型
[C] 纯文本查看 复制代码 NTSTATUS RtlGetVersion(PRTL_OSVERSIONINFOW lpVersionInformation);
RTL_OSVERSIONINFOW 版本信息结构体
返回0 = 成功 (STATUS_SUCCESS)
[C] 纯文本查看 复制代码 typedef struct _RTL_OSVERSIONINFOW {
DWORD dwOSVersionInfoSize; // 0x00,必须先填结构体大小 148
DWORD dwMajorVersion; // 0x04,主版本
DWORD dwMinorVersion; // 0x08,次版本
DWORD dwBuildNumber; // 0x0C,编译号
DWORD dwPlatformId; // 0x10
WCHAR szCSDVersion[128]; // 0x14
} RTL_OSVERSIONINFOW;
// 结构体总大小 = 4 + 4 + 4 + 4 + 4 + 256 = 280字节(0x118)
以下是易语言写法
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | ver | RTL_OSVERSIONINFOW | | |
ver.dwOSVersionInfoSize = 280 RtlGetVersion (ver ) 判断 (ver.dwMajorVersion = 6 且 ver.dwMinorVersion = 0 ) 返回 (8 ) 判断 (ver.dwMajorVersion = 6 且 ver.dwMinorVersion = 1 ) 返回 (9 ) 判断 (ver.dwMajorVersion = 6 且 ver.dwMinorVersion = 2 ) 返回 (10 ) 判断 (ver.dwMajorVersion = 6 且 ver.dwMinorVersion = 3 ) 返回 (11 ) 判断 (ver.dwMajorVersion = 10 且 ver.dwBuildNumber < 22000 ) 返回 (12 ) 判断 (ver.dwMajorVersion = 10 且 ver.dwBuildNumber ≥ 22000 ) 返回 (13 ) 返回 (0 ) |
| RtlGetVersion | 整数型 | | |
| ntdll.dll | |
| RtlGetVersion | |
| lpVersionInformation | RTL_OSVERSIONINFOW | | |
|
| RTL_OSVERSIONINFOW | | |
| dwOSVersionInfoSize | 整数型 | | | | dwMajorVersion | 整数型 | | | | dwMinorVersion | 整数型 | | | | dwBuildNumber | 整数型 | | | | dwPlatformId | 整数型 | | | | szCSDVersion | 文本型 | | |
|