gpt4 book ai didi

c++ - CreateProcessWithLogonw 返回不支持的函数

转载 作者:行者123 更新时间:2023-11-28 05:15:05 25 4
gpt4 key购买 nike

我正在尝试启动一个程序,该程序以另一个用户的身份在 Windows 7 系统上使用 Win32 函数 CreateProcessWithLogon 启动另一个程序,但它返回错误 120,表示不支持的函数

如果我在命令中运行该程序,它会正常工作。另一方面,如果我使用 ShellExecute 启动程序,则会出现错误。

命令行 -> 启动程序 A -> 程序 A 执行 CreateProcessWithLogon。好的32位程序->启动程序A->程序A执行CreateProcessWithLogn。错误

        if (!CreateProcessWithLogonW(L"username", L"domain", L"password",
LOGON_NETCREDENTIALS_ONLY, L"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe", L"iexplore",
NULL, NULL, NULL,
&si, &pi))
DisplayError(L"CreateProcessWithLogonW");

最佳答案

如果你想作为另一个用户启动程序,不要使用LOGON_NETCREDENTIALS_ONLY标志——使用LOGON_WITH_PROFILE

    STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
if (CreateProcessWithLogonW(L"username", L"domain", L"password", LOGON_WITH_PROFILE,
L"C:\\windows\\notepad.exe", L"notepad.exe", 0, NULL, NULL, &si, &pi))
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}

如果你使用标志 LOGON_NETCREDENTIALS_ONLY

The system does not validate the specified credentials.

所以您真的不需要提供真实姓名或密码。因为系统不做真正的登录但是

The new process uses the same token as the caller, but the system creates a new logon session within LSA

因此此登录类型克隆调用者当前 token ,但在其中指定新的登录 session 。您的程序将作为同一用户(SID、组、权限)运行,但在单独的登录 session 中

只需要一个技巧,没有记录 - lpUsername 必须是 UPN 格式 - 包含 @ 符号。

所以代码必须是这样的:

    STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
if (CreateProcessWithLogonW(L"@", 0, 0, LOGON_NETCREDENTIALS_ONLY,
L"C:\\windows\\notepad.exe", L"notepad.exe", 0, NULL, NULL, &si, &pi))
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}

作为结果,将使用 NewCredentials 创建新的 LogonSession作为SECURITY_LOGON_TYPE , AuthenticationPackage == 协商

关于c++ - CreateProcessWithLogonw 返回不支持的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42833966/

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