该进程未作为WOW64运行,它在x64环境中作为x64运行。 代码如下
DWORD64 dwProcessAffinity, dwSystemAffinity;
GetProcessAffinityMask(GetCurrentProcess(), &dwProcessAffinity, &dwSystemAffinity);
因为确认IsWow64返回false。创建的环境的处理器数量超过一百个。
答案 0 :(得分:3)
GetProcessAffinityMask的返回值是BOOL,因此如果调用返回TRUE,则调用成功。有两个掩码,一个用于进程关联,另一个用于系统关联。掩码中的每个位对应于处理器。例如,掩码0x10表示处理器4,掩码0x03表示处理器0和1.掩码-1(0xffffffffffffffff)设置为64位,每个处理器0到63一个。使用DWORD_PTR(而不是DWORD64) ,有可能(原始开发人员)尝试确保以后的程序员将结果视为无符号十六进制序列而不是有符号整数,此外这种类型会导致适当调整掩码大小(参见下一段)。
当开发Windows 2003时,拥有一个甚至32个处理器的系统极为罕见,因此将限制为32(对于32位版本)和64(对于64位版本)是合理的。即使在2008年的时间框架内,仍然存在关于提高Windows 2008 R2的处理器限制的争论,现在支持256,但可能更高。运行Windows 2003正在使用已有十年历史的技术,因此人们可以预期当时的新技术会受到一些限制。
超线程(HT)是一项有趣的技术。添加附加硬件以支持另一个逻辑线程有一些好处。理解对于OS,两个逻辑处理器之间没有区别,因为不能说X是物理处理器而Y是HT“附加”。硬件将X和Y视为共享资源的平等伙伴,因此操作系统可以平等地看待它们。
作为最终的不确定因素,我无法告诉您Windows 2003将使用的80个逻辑处理器的哪个子集。它可能需要32个HT对,或者它可能需要物理40并包括24个逻辑HT单元。您可以通过运行GetLogicalProcessorInformation来帮助回答这个问题。