2011-08-15 76 views
0

我有一個模擬用戶的服務。該服務以本地系統運行。該用戶是本地管理員和域管理員。模仿之後,我需要調整流程的令牌權限。我希望在返回的令牌句柄上使用OpenProcessToken,然後使用AdjustTokenPrivilegesImProonateLoggedOnUser後OpenProcessToken失敗

調用LogonUserImpersonateLoggedOnUser後,下面的調用與拒絕訪問失敗。

HANDLE hToken; 
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) 
{ 
     Log("Error=%d", GetLastError()); 
} 

我登錄使用LOGON32_LOGON_INTERACTIVELOGON32_PROVIDER_DEFAULT用戶。

調整用戶令牌上相同的權限成功。

回答

1

這是一個兩部分的答案,這取決於你正在嘗試做的事:

1)如果你想調整權限的模擬令牌,你需要使用OpenThreadToken功能,不OpenProcessToken。模仿會影響線程,而不是整個過程。試試這個:

OpenThreadToken(GetCurrentThread(), TOKEN_READ | TOKEN_ADJUST_PRIVILEGES, TRUE, &hToken) 

2)如果你真的要調整權限的進程令牌,你應該這樣做在一個點上,當你沒有模擬客戶端。您可以根據需要打開和關閉模擬。