SetProcessAffinityMask的問題


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM