GetProcessAffinityMask返回null进程关联

时间:2015-03-30 09:17:59

标签: c++ c winapi

在一个非常简单的测试控制台应用程序中,我试图获得进程'亲和力掩码:

编辑此代码不正确。问题解决了。请检查评论和经过验证的答案。

#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

1 个答案:

答案 0 :(得分:2)

传递DWORD_PTR变量的地址而不是DWORD变量。

DWORD_PTR dwProcessAffinityMask;
DWORD_PTR dwSystemAffinityMask;

删除那些演员阵容。他们清楚地表明了什么是错的。当编译器报告您传递的类型不匹配的参数时,请更正类型而不是抑制错误。编译器已经告诉你出了什么问题,你只需要学习如何解释它的消息。