createProcessWithLogon返回不支持的函数
CreateProcessWithLogon returns Function not supported
我正在尝试启动一个程序,该程序在Windows 7系统上使用Win32函数createProcesswithlogon启动另一个程序,但它返回了不支持函数的错误120。
如果我在命令中运行程序,则可以正常工作。另一方面,如果我使用Shellexecute启动程序,则会得到错误。
CMD行 ->启动程序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");
如果要启动program 作为另一个用户不使用 LOGON_NETCREDENTIALS_ONLY
flag-使用 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
该系统未验证指定的凭据。
因此,您实际上不需要提供真实姓名或密码。因为系统不是真正的登录,而是
新过程使用与呼叫者相同的令牌,但是系统 在LSA
中创建一个新的登录会话
因此,此登录类型克隆呼叫者当前令牌,但在其中指定了新的登录会话。您的程序将运行作为同一用户( sid ,组,特权),但在单独的登录session
中只有一个技巧需要,未记录 - lpusername 必须以UPN格式 - 包含@ symbol。
因此,代码必须这样:
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
作为SECURITY_LOGON_TYPE
,AuthenticationPackage == Negotiate
相关文章:
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 为什么向量不支持 size 作为成员变量,就像 Java 类中的长度变量一样,而是函数 size()?
- C++11 NVCC 不支持函数 iota()?
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- PGI 不支持 OpenMP 4.5 运行时函数
- createProcessWithLogon返回不支持的函数
- QT快速UI表单不支持函数
- 错误C4430:丢失类型指定词 - 假设INT.注意:C 不支持对我的构造函数的默认设置
- 聚合初始化不支持构造函数访问
- 为什么 g++ 不支持在 Ubuntu 上使用分配器构造函数?
- 我的 cipher() 函数似乎不支持大写字母
- Matlab 编码器不支持的函数
- 函数指针是否不支持C++中的实例类型
- clang 3.5中不支持-finline函数
- Matlab Codegen:不支持匿名函数
- java.lang.IllegalArgumentException:函数参数0处不支持的参数
- 为什么C++"标准"不支持另一个函数中的函数定义?
- 为什么 gcc 不支持裸函数?
- 调用函数时不支持间接强制转换
- 对于不支持RTLD_DEEPBIND的平台,是否有替代 dlopen() 函数中 dlopen() 函数中的标志RTLD_DEEPBIND?