gpt4 book ai didi

c++ - ImpersonateLoggedOnUser 成功但辅助进程仍在初始上下文中运行

转载 作者:太空宇宙 更新时间:2023-11-04 15:35:11 25 4
gpt4 key购买 nike

我有一个安装程序在安装完成后尝试在当前用户上下文中(重新)启动我的应用程序。安装程序在 SYSTEM 上下文中运行,并在启动应用程序之前尝试(理论上成功)模拟当前用户。但是,当我查看任务管理器时,我发现我的应用程序正在 SYSTEM 上下文中运行。

这是(摘自)我的代码:

    TCHAR szUsername[128] = _T("");
DWORD dwUsernameSize = 128;
GetUserName(szUsername, &dwUsernameSize);

// Lets the calling process impersonate the security context of a logged-on user.
if (!ImpersonateLoggedOnUser(hToken))
{
throw Win32Exception(GetLastError(), _T("Failed to impersonate current user"));
}

TCHAR szUsername2[128] = _T("");
DWORD dwUsernameSize2 = 128;
GetUserName(szUsername2, &dwUsernameSize2);

MLOGD(_T("ProcessUtils::StartProcessInCurrentUserContext: Successfully impersonated %s"), szUsername2);

ProcessUtils::StartProcess(sExeName, lstParams, sWorkingDir, bWaitToFinish, errCode);

ProcessUtils::StartProcess 是 CreateProcess 的包装器。

szUsername 包含 SYSTEM,szUsername2 包含当前用户。所以 ImpersonateLoggedOnUser 是成功的。但是,如上所述,该进程是在 SYSTEM 上下文中启动的,而不是当前用户。

我不确定这会有多大帮助,但我的安装程序是用 NSIS 编写的,它通过用 C/C++ 编写的插件调用包含上面代码的函数。

有谁知道为什么我的应用程序无法在当前用户上下文中启动?

最佳答案

Win32 CreateProcess 在与 SYSTEM 调用者相同安全上下文中创建一个进程(即使您正在模拟)。

认为您需要调用 CreateProcessAsUser。

关于c++ - ImpersonateLoggedOnUser 成功但辅助进程仍在初始上下文中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841616/

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