因此,我在网上查阅了大量的资料,发现了几个可行的方法
本模块提供的4道命令使用了系统ntdll.dll提供的命令RtlGetNtVersionNumbers 和shlwapi.dll的命令IsOS(简单明了,但由于是未文档化的命令,显得有些不为人知)
本模块提供的命令在Windows 2000及以上的客户Duan系统以及Windows Server 2003及以上的服务器系统可用,除了那些古老版本,几乎均可使用。
dll命令如文末图 运行原理
在dll获取了详细版本后,根据 Microsoft Docs中各版本系统的主版本和次版本参考 和 百du百科中一些较高版本系统的build号 来逐一判断并返回系统版本,绝对可靠。客户Duan版本系统中从Windows10开始,主版本号和次版本号不再改变,因此得根据build号范围判断Win10和Win11。服务器版本从Windows Server 2016开始,主版本号和次版本号不再改变,也得根据build号范围判断系统版本。
查阅的资料如下
Microsoft Docs中的 操作系统版本参考 https://learn.microsoft.com/zh-c ... ting-system-version
百du百科 Windows Server 2016的各版本系统build号 https://baike.baidu.com/item/Win ... 18708757?fr=aladdin
百du百科 Windows Server 2019的各版本系统build号 https://baike.baidu.com/item/Windows%20Server%202019/24272934?fr=aladdin
百du百科 Windows Server 2022的各版本系统build号 https://baike.baidu.com/item/Windows%20Server%202022/59326783?fr=aladdin
百du百科 Windows 10 各版本号 https://baike.baidu.com/item/Windows%2010/6877791?fr=aladdin
百du百科 Windows 11 各版本号 https://baike.baidu.com/item/Windows%2011/57321047?fr=aladdin
RtlGetNtVersionNumbers命令由于未文档化,Microsoft官网尚不能找到,网上信息也较少。这里是Wine API中对RtlGetNtVersionNumbers命令的声明和参数信息https://source.winehq.org/WineAPI/RtlGetNtVersionNumbers.html
具体判断过程见源码内