我试图更好地理解Windows会话(TS会话和登录会话)的工作原理(目前在XP中),所以也许我的整个问题或我想要做的事情是不可能的。
我正在运行Windows服务(在XP中),它在会话0中运行,我正在尝试使用WTSQueryUserToken()
将该用户名附加到此会话。
现在,在会话0中有几个用户名:SYSTEM
,theuser
(已登录用户),NETWORK SERVICE
,LOCAL SERVICE
。
当我使用WTSQueryUserToken()
时,我得到“theuser”(这是活动会话),但我试图获取我的服务的用户名(即SYSTEM)。
这是可能的还是我只是弄错了?
答案 0 :(得分:1)
我使用以下代码获取进程的用户令牌
HANDLE GetProcessOwnerToken(DWORD pid)
{
if (!pid) return NULL;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (!hProcess) return NULL;
HANDLE hToken = NULL;
if(OpenProcessToken(hProcess, MAXIMUM_ALLOWED, &hToken))
{
HANDLE result = INVALID_HANDLE_VALUE;
if(DuplicateTokenEx(hToken, TOKEN_ASSIGN_PRIMARY | TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &result))
{
if(result != INVALID_HANDLE_VALUE)
{
CloseHandle(hToken);
CloseHandle(hProcess);
return result;
}
}
CloseHandle(hToken);
}
CloseHandle(hProcess);
return NULL;
}
我不知道它是否适用于服务,我认为应该。