BOOL WINAPI SetProcessAffinityMask( _In_ HANDLE hProcess, _In_ DWORD_PTR dwProcessAffinityMask );//MSDN2015版
这里第二个参数有问题,因为DWORD_PTR is a pointer cast to a dword value
虽然DWORD_PTR跟DWORD是一样的, typedef DWORD DWORD_PTR
但意义上来说不一样,DWORD_PTR说明这个双字是一个地址,这个地址指向一个DWORD值
而DWORD说明这是一个DWORD值
所以,我在用这个函数的时候特意注意了
用了个
DWORD dwAffinityMask = 0x1 // 处理器0 DWORD_PTR dwptrAff = (DWORD)(&dwAffinityMask); SetProcessAffinityMask(hProcess,dwptrAff); //结果返回错误,0x57, INVALID_PARAMETER
然后我就
DWORD dwAffinityMask = 0x1; SetProcessAffinityMask(hProcess,dwAffinityMask); //这样竟然就成功了,根本不需要那样,所以我被MSDN文档的那个参数类型误导了!
然后我已经去MSDN网站上反馈错误了。
另外关联性就是一个DWORD 32位,从右往左,第i位代表处理器i, 1为存在/设置;0为不存在/取消
0x0000000f 处理器0~3
0x00000008 处理器3
0x00000005 处理器0和2
然后我发现自己错了,DWORD_PTR并没有我说的,我按照INT_PTR望文生义了,网上查了下,加_PTR似乎是说确保放得下一个指针,用于64和32移植相关问题的,所以就把他当DWORD用就完了,白想这么多。