在Windows下,如何识别当前控制台用户,然后针对该用户注销? 我需要C++代码中的能力来在控制台用户调用时注销控制台用户,或者如果它是由该用户调用的,并且可能是将来的Windows服务。我遇到的问题是ExitWindowsEx只会注销调用它的用户。如果管理员进程调用注销,则控制台用户不受影响。据我所知,唯一能做到这一点的应用程序是psShutdown.exe,只是psShutdown只能由管理员运行。在C++中有人知道如何识别控制台用户,然后对该用户进行注销吗?这里面的魔法是什么?我正在寻找在WindowsXP和更高版本中工作的东西。此外,我无法使用WMI,因为某些计算机正在运行嵌入的windows,并且没有WMI

在Windows下,如何识别当前控制台用户,然后针对该用户注销? 我需要C++代码中的能力来在控制台用户调用时注销控制台用户,或者如果它是由该用户调用的,并且可能是将来的Windows服务。我遇到的问题是ExitWindowsEx只会注销调用它的用户。如果管理员进程调用注销,则控制台用户不受影响。据我所知,唯一能做到这一点的应用程序是psShutdown.exe,只是psShutdown只能由管理员运行。在C++中有人知道如何识别控制台用户,然后对该用户进行注销吗?这里面的魔法是什么?我正在寻找在WindowsXP和更高版本中工作的东西。此外,我无法使用WMI,因为某些计算机正在运行嵌入的windows,并且没有WMI,c++,windows,logoff,C++,Windows,Logoff,(psShutdown.exe必须以管理员身份运行的原因是它安装了一项服务,而普通用户没有这样做的权限。)我从来没有这样做过,但似乎可以结合使用和来识别控制台会话,但要进一步,您将需要一些权限,您必须调用WTSQueryUserToken(您需要作为系统运行才能执行此操作)以获取令牌句柄,然后创建ProcessAsUser或模拟并调用ExitWindowsEx,或者如果您不在服务中,则调用WTSLogoffSession。(我尝试在我的XP设备上调用WTSLogoffSession,但它不起作用

(psShutdown.exe必须以管理员身份运行的原因是它安装了一项服务,而普通用户没有这样做的权限。)

我从来没有这样做过,但似乎可以结合使用和来识别控制台会话,但要进一步,您将需要一些权限,您必须调用WTSQueryUserToken(您需要作为系统运行才能执行此操作)以获取令牌句柄,然后创建ProcessAsUser或模拟并调用ExitWindowsEx,或者如果您不在服务中,则调用WTSLogoffSession。(我尝试在我的XP设备上调用WTSLogoffSession,但它不起作用,可能是因为终端服务器服务未在此系统上运行)

这不是当前正在运行shell(通常是explorer.exe)的用户吗?@Eugen:系统(终端服务器/远程桌面)上可能有多个用户处于活动状态。控制台会话是连接到真实键盘/屏幕的登录会话。例如,在vista中,服务在会话0中运行,第一个登录的用户在会话1中运行etc@Anders当前位置谢谢你澄清这一点,很高兴知道。我还没能让它全部正常工作,但我认为这是正确的道路。当我有时间弄清楚的时候,我会把我必须做的事情发回来。