QAZ*_*QAZ 7 c windows winapi desktop
我希望枚举系统中的所有桌面并获取该桌面的登录用户名.到目前为止,我有以下代码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);
Run Code Online (Sandbox Code Playgroud)
这可能是因为我通过GetUserObjectInformation而不是用户SID提取登录SID.如果可以,我可以将其转换为登录用户SID?
任何人都可以指出我正确的方向来获取任意桌面的登录用户名(通过它各自的HDESK或HNWD手柄,甚至是台式机的HWINSTA手柄)?提前致谢.
小智 2
如果您想要的是用户信息,那么这将起作用。
调用 WTSEnumerateSessions 获取 WTS_SESSION_INFO 结构数组。对于每个结构,将 SessionId 成员传递给 WTSQuerySessionInformation,并将 WTSInfoClass 成员设置为 WTSUserName。这将为您提供与会话关联的用户名(如果有)。
或者,您可以将 WTSInfoClass 设置为 WTSSessionInfo 并获取 WTSINFO 结构。其中包含大量信息,包括用户名和域。查看 WTSINFO 的头文件定义,因为 MSDN 页面是错误的。
您必须调用 WTSEnumerateSessions 两次,一次获取所需的缓冲区大小,另一次获取您的信息。
关系:一个或多个桌面对象位于 Windows Station 中。Windows Station 与会话相关联。