无法更改用户的会话(切换用户)
Can't change user's session (switch users)
我正在用c++工作。我在计算机上发现了多个用户配置文件,我想写一个改变会话的服务。但我不能更改任何会话。我发现在下面的页面代码,我正在使用更改用户会话。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379608 (v = vs.85) . aspx
我尝试过CreateProcessAsUser函数,而不是CreateProcessWithLogonW和CreateProcessWithTokenW。但它有所有的函数返回FALSE。π。hProcess和pi。hThread值来自0xcccccccc。返回错误码87。程序在这里结束:
bResult = CreateProcessAsUser(
hToken,
NULL,
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE ,
NULL,
NULL,
&si,
&pi
);
RevertToSelf();
if (bResult && pi.hProcess != INVALID_HANDLE_VALUE)
{
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
}
if (pi.hThread != INVALID_HANDLE_VALUE){ //p.hTheread = 0xcccccccc
wprintf(L"%dn", GetLastError()); // ErrorCode=87.
CloseHandle(pi.hThread);
}
当这段代码运行时,我正在考虑将代码添加到服务中
您误解了CreateProcessAsUser函数的目的。这是一个常见的误解。
Win32函数CreateProcessAsUser, CreateProcessWithLogonW, LogonUser, LogonUserEx, LogonUserExExW, CreateLogonSession等都与内核的安全模型(进程,登录会话和令牌)有关,而与交互式登录进程(创建远程桌面会话,将它们与用户关联,并在它们之间切换)无关。
没有Win32函数允许您控制交互式登录过程,尽管有函数(如ExitWindowsEx)允许您注销当前用户。
相反,根据您的情况,您可以注册凭据提供程序或使用AutoAdminLogon注册表设置。前者要复杂得多;后者的限制更大——特别是,如果系统注销了,除了重新启动系统之外,似乎没有任何可靠的方法可以用新的凭据启动登录。
如果您使用AutoAdminLogon,请确保遵循保护自动登录密码中的说明,以确保密码(合理)安全。
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 为多个会话保留XPtr
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 我如何将登录的用户登录到当前会话中的域用户
- 在C++中获取用户的登录会话
- 正在尝试解释Windows操作系统上的用户会话状态
- 服务中的 DDE 客户端与用户会话中的服务器通信
- 如何判断进程的用户令牌是否与运行进程的登录会话令牌相同?
- SendNotifyMessage API 是否跨用户会话工作
- 在Qt C++中连接用户特定的DBus会话
- CPP/Gdb 返回 0;导致所有用户的会话登录
- API检测活跃的会话在Mac OS X与快速用户切换
- 在终端服务服务器会话中存储用户的应用程序首选项。托管C++
- 无法更改用户的会话(切换用户)
- 是否可以判断交互式用户会话是自动启动还是用户手动登录?
- 在IE中派生或复制用户浏览器会话