[英]Multilevel usage of thread impersonation
我在一些很久以前編寫的類中遇到了一些問題,這些類會進行線程級模擬和進程生成。 問題似乎是我對這些實用程序類的使用超出了其他人嘗試使用它們的范圍。
第一個是使用OpenThreadToken和DuplicateToken以及ImpersonateLoggedOnUser進行線程級模擬。
第二種嘗試使用CreateProcessAsUser創建一個進程,該進程具有使用OpenThreadToken / DuplicateToken獲得的標記。
我遇到的問題是我有:
Thread 1 running in IIS with the correct user
Thread 2 that is created by Thread 1 - which is impersonated
Thread 3 that is created by Thread 2 - which is impersonated
Process 1 that is spawned by Thread 3 - which I attempt to impersonate
產生過程1失敗,錯誤代碼為5,來自OpenThreadToken。 如果我從線程1生成進程1,OpenThreadToken不會給我任何guff。 我從OpenThreadToken和DuplicateToken請求TOKEN_ACCESS_ALL,直到我從Thread 3實際執行它才會失敗。任何人都對我在這里需要什么權限有任何見解?
這是產生過程的代碼:
(模擬線程只涉及獲取線程令牌句柄並調用ImpersonateLoggedOnUser ...)
//process spawn
if (!::OpenThreadToken(::GetCurrentThread(),
TOKEN_ALL_ACCESS,
false,
&hThreadUserToken))
{
Handle hNewProcessUserToken;
if (!DuplicateTokenEx(
hThreadUserToken,
TOKEN_ALL_ACCESS,
NULL,
SecurityDelegation,
TokenPrimary ,
&hNewProcessUserToken))
{
m_dwCreateError = ::GetLastError();
return false;
}
bReturnValue = ::CreateProcessAsUserA(
hNewProcessUserToken,
AppName,
cmdLine,
NULL,
NULL,
TRUE,
0,
m_lpEnvironment,
cwdStr
&m_StartupInfo,
&piProcInfo);
有什么明顯我在這里做錯了嗎? 我不能真正從線程1產生進程 - 它只是沒有它需要的正確信息,並且從線程3回到它的句柄是......不是一個好的解決方案而不是好的設計。
在模擬的情況下,OpenThreadToken失敗,因為模擬的用戶沒有訪問該線程令牌的權限。 你應該傳遞OpenAsSelf = TRUE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.