2010-11-22 34 views
0

我正在使用OpenProcess功能。該代碼在Windows XP中工作得很好,但在Win 7 X32位上失敗。OpenProcess無法勝出7

我的代碼如下

void SetDebugPrivileges() 
{ 
    void* tokenHandle; 

    TOKEN_PRIVILEGES privilegeToken; 
    LookupPrivilegeValue(0, SE_DEBUG_NAME, &privilegeToken.Privileges[0].Luid); 
    privilegeToken.PrivilegeCount = 1; 
    privilegeToken.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &tokenHandle); 
    AdjustTokenPrivileges(tokenHandle, 0, &privilegeToken, sizeof(TOKEN_PRIVILEGES), 0, 0); 
    CloseHandle(tokenHandle); 
} 

HANDLE _stdcall MyOpenProcess(DWORD dwAccess, BOOL bInherit, DWORD dwPID) 
{ 
    SetDebugPrivileges(); 

    HANDLE hRes = OpenProcess(dwAccess | PROCESS_SET_INFORMATION | PROCESS_VM_READ, bInherit, dwPID); 
} 

OpenProcess失敗,錯誤代碼5勝7,但是,XP正常工作。如果有人能夠幫助解決這個問題,那將是非常好的。

+0

只是爲了確保..您正在使用管理權限運行您的應用程序? – christian 2010-11-22 10:46:20

+1

訪問被拒絕。 VM_READ和調試訪問都非常有特權。 – 2010-11-22 11:56:52

回答

4

很可能這是與UAC有關的。 OpenProcessTokenAdjustTokenPrivileges實際上是否成功?

+0

是OpenProcessToken和AjustTokenPrivileges這兩個函數都是成功的..我仍然得到訪問被拒絕的錯誤 – Neha 2010-11-23 06:13:12

+0

好的我注意到,當我運行一個特定的安裝時,我在MyOpenProcess函數中獲取msiexec多個時間的進程ID。我得到了5次。所以5次openProcess正在處理msiexec.exe。其中4次GetLastError()返回成功,第5次返回訪問被拒絕。那會是問題嗎?如果我多次調用openProcess,我需要注意嗎? – Neha 2010-11-23 11:28:52

+0

您能否請您在原始文章中添加更多細節,解釋您確切想要做什麼以及何時發生問題?這與MSI和msiexec.exe有什麼關係,何時調用MyOpenProcess()等等等等。 – Arnout 2010-11-24 08:36:24