在一个非常简单的测试控制台应用程序中,我试图获得进程'亲和力掩码:
编辑此代码不正确。问题解决了。请检查评论和经过验证的答案。
#include <cstdlib>
#include <cstdio>
#include <windows.h>
int main()
{
while (1)
{
DWORD dwProcessAffinityMask = 0;
DWORD dwSystemAffinityMask = 0;
BOOL res = GetProcessAffinityMask(
GetCurrentProcess(),
(PDWORD_PTR)&dwProcessAffinityMask,
(PDWORD_PTR)&dwSystemAffinityMask);
printf("%d 0x%X 0x%X\n",
res,
dwProcessAffinityMask,
dwSystemAffinityMask);
Sleep(1000);
}
return 0;
}
这是输出(64位可执行文件,64位系统,这意味着我不属于WoW64特殊情况):
1 0x0 0x3
1 0x0 0x3
...
在具有2核CPU的笔记本电脑上运行,生成的系统掩码看起来正确。但我不明白我在这里得到的dwProcessAffinityMask
价值的含义。只是为了它,我还尝试通过更改进程的亲和力掩码来玩任务管理器,但输出保持不变。
此行为似乎不是documented。
答案 0 :(得分:2)
传递DWORD_PTR
变量的地址而不是DWORD
变量。
DWORD_PTR dwProcessAffinityMask;
DWORD_PTR dwSystemAffinityMask;
删除那些演员阵容。他们清楚地表明了什么是错的。当编译器报告您传递的类型不匹配的参数时,请更正类型而不是抑制错误。编译器已经告诉你出了什么问题,你只需要学习如何解释它的消息。