gpt4 book ai didi

c++ - 获取流程所有者 (Citrix/Provisioning)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:51:46 24 4
gpt4 key购买 nike

我使用 OpenProcessToken、GetTokenInformation 和 LookupAccountSid 来确定某个进程的所有者。

在本地计算机(Win 7 和 Win 8.1)上,在 RD 服务 session (Server 2012)上它工作正常。我确实得到了正确的用户名。任务管理器中进程旁边显示的用户名。

当我在 Provisioning (ex Citrix) 环境中执行相同的代码时,尽管任务管理器中显示了不同的名称,但我只获得了用户名“Administrator”。

有人知道如何在供应环境中解决这个问题吗?

非常感谢您的帮助马丁

这是我正在使用的 C++ 代码:

BOOL DDEWinWord::processStartedFromLocalUser(DWORD procId)
{
#define MAX_NAME 256
DWORD dwSize = 0, dwResult = 0;
HANDLE hToken;
SID_NAME_USE SidType;
char lpName[MAX_NAME];
char lpDomain[MAX_NAME];
PTOKEN_OWNER tp;

// Open a handle to the access token for the calling process.
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procId);
if (!OpenProcessToken(processHandle, TOKEN_QUERY, &hToken)) {
AfxMessageBox("processStartedFromLocalUser - OpenProcessToken fehlschlag.");
return FALSE;
}

// Call GetTokenInformation to get the buffer size.
if(!GetTokenInformation(hToken, TokenOwner, NULL, dwSize, &dwSize))
{
dwResult = GetLastError();
if (dwResult != ERROR_INSUFFICIENT_BUFFER)
{
AfxMessageBox("processStartedFromLocalUser - GetTokenInformation fehlschlag.");
return FALSE;
}
}

// Allocate the buffer.
tp = (PTOKEN_OWNER)GlobalAlloc(GPTR, dwSize);

// Call GetTokenInformation again to get the group information.
if (!GetTokenInformation(hToken, TokenOwner, tp, dwSize, &dwSize))
{
AfxMessageBox("processStartedFromLocalUser - GetTokenInformation mit tp fehlschlag.");
return FALSE;
}

if (!LookupAccountSid(NULL, tp->Owner, lpName, &dwSize, lpDomain, &dwSize, &SidType))
{
AfxMessageBox("processStartedFromLocalUser - LookupAccountSid fehlschlag.");
return FALSE;
}
else
{
AfxMessageBox(lpName);
}

return (m_stUserId.CompareNoCase(lpName) == 0);
}

最佳答案

您应该使用 TokenUser 而不是 TokenOwner

关于c++ - 获取流程所有者 (Citrix/Provisioning),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27288387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com