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用就完了,白想這么多。