PE 文件中的 OSMajor 和 OSMinor 版本号

OSMajor and OSMinor version numbers in PE file

最近我偶然发现了一个奇怪的现象。

我正在为 PE-files 构建一个自卸车,阅读 header 部分和 "optional" 部分 header 非常好。现在,当我到达字段 "OS major" 和 "OS minor" 时,我注意到一个奇怪的值。

[WORD] OS VERSION major        :0x00000006
[WORD] OS VERSION minor        :0x00000000

显然这意味着 Windows Vista....

此处:https://docs.microsoft.com/de-de/windows/win32/sysinfo/operating-system-version?redirectedfrom=MSDN

我写了一个简单的 hello-world 32 位可执行文件,还用 7zip.exe 进行了测试(出于某种原因,它是 4.0 [==Win98])。

现在我很困惑....我刚写的PE-file(Visual Studio 2019)怎么可能不是OS版本10??? 微软是不是因为懒惰,没有正确更新他们的链接器???

在那个页面上它说了一些关于清单文件的事情,但只有它会告诉你 Windows 8.0 如果你不清单你的可执行文件(但是我应该这样做,实际上不是这个问题很重要)。

问题:有没有办法从二进制文件中读取正确的OS-version?

事实证明,这个数字似乎更像是一个 "Required Minimum Opreating system",

这可以解释为什么它是 windows Vista。