获取与桌面相关的已loginWindows用户名

我想枚举系统中的所有桌面,并获取该桌面的login用户名。 到目前为止,我有以下代码snippit作为获取HDESK句柄,并试图确定与之关联的用户名(如果有的话)的示例,但对LookupAccountSid的调用失败,并显示ERROR_NONE_MAPPED(“帐户名和安全ID之间没有映射完成“)。

HDESK desk = OpenDesktop( "Default", 0, FALSE, READ_CONTROL | DESKTOP_READOBJECTS ); DWORD size = 4096; SID * sid = (SID *)malloc( size ); GetUserObjectInformation( desk , UOI_USER_SID, sid, size, &size ); char name[512], domain[512]; int namesz = 512, domainsz = 512; LookupAccountSid( NULL, sid, &name, &namesz, &domain, &domainsz, &s); 

这可能是因为我通过GetUserObjectInformation而不是用户SID拉出loginSID。 如果是的话,我可以将其转换为login的用户SID?

任何人都可以指向正确的方向获取任意桌面的login用户名(通过相应的HDESK或HNWD手柄,甚至桌面的HWINSTA手柄)? 提前致谢。

Solutions Collecting From Web of "获取与桌面相关的已loginWindows用户名"

如果你想要的是用户信息,那么这将工作。

调用WTSEnumerateSessions获得一个WTS_SESSION_INFO结构数组。 对于每个结构,将SessionId成员传递给WTSQuerySessionInformation并将WTSInfoClass成员设置为WTSUserName。 这将为您提供与会话相关的用户名(如果有的话)。

或者,您可以将WTSInfoClass设置为WTSSessionInfo并返回一个WTSINFO结构。 这包含了很多信息,包括用户名和域名。 虽然MSDN页面是错误的,但请看WTSINFO的头文件定义。

您必须调用WTSEnumerateSessions两次,才能获得所需的缓冲区大小,然后再获取一次信息。

关系:一个或多个Desktop对象位于Windows Station中。 Windows Station与会话相关联。

问题是桌面根本不与用户关联。 尝试使用psexec在SYSTEM帐户下运行记事本。 它运行在你的窗口站台上。 否则,你将无法看到它。

但是,如果你想获得与窗口站相关的会话,那么是的,这是可能的。 您需要使用ObjectNameInformation调用NtQueryObject来获取对象的名称。 例如,下面是我得到的: \Sessions\1\Windows\WindowStations\WinSta0 。 有你的会话ID。

这不是一个解决方案,但是对台站/桌面很好的描述。 从http://www.microsoft.com/technet/security/bulletin/fq00-020.mspx

什么是窗口站? Windows站点是一个安全容器,包含剪贴板,一些全局信息和一组一个或多个桌面。 一个Windows 2000会话将有几个窗口站点,一个分配给交互式用户的登录会话,另一个分配给Winlogon进程,安全屏幕保护程序进程,以及在交互式用户以外的安全上下文中运行的任何服务用户。 分配给交互式用户登录会话的交互式窗口站还包含键盘,鼠标和显示设备。 交互式窗口站对用户是可见的并且可以接收来自用户的输入。 所有其他窗口站都是非交互式的,这意味着它们不能被用户看到,并且不能接收用户输入。

什么是桌面? 桌面是包含在窗口站内的安全容器对象。 Windows站点中可能包含许多桌面。 桌面具有逻辑显示表面,并包含窗口,菜单和挂钩。 只有交互式窗口站的桌面可以看到并接收用户输入。 在交互式窗口工作站上,一次只有一个桌面处于活动状态。 这个活动桌面(也称为输入桌面)是当前用户可以看到并接收用户输入的桌面。

您可以从%USERPROFILE%环境变量的末尾提取它

nbtstat曾经可以通过命令行,使用机器名或IP地址。 不过,我看了很长时间了。

正确的代码,为我工作:

 TCHAR username[UNLEN + 1]; DWORD size = UNLEN + 1; GetUserName((TCHAR*)username, &size); 

我在Windows 7 x86上使用Visual Studio Express 2012