如何在Windows中获取当前数量的交互式用户会话?
我正在编写一个Windows服务,需要知道当前是否有任何用户在计算机中登录.
到目前为止,我已经尝试过Win32_LogonSession(WMI)和LsaEnumerateLogonSessions / LsaGetLogonSessionData(secur32.dll). 两者都工作,并且似乎返回相同的数据,但是当用户注销时它们太慢而无法更新: >系统启动时,返回“0个交互式用户”. (好) 因此,Win32_LogonSession和LsaEnumerateLogonSessions都足够好了.服务需要在最后一个交互式用户离开后的5分钟内知道. 甚至连SysInternals的LogonSessions.exe都没有给出最新的答案.
我最终得到了以下方法:计算至少有一个进程在运行的交互式会话的数量.
1)获取每个交互式会话的登录会话ID. > LsaEnumerateLogonSessions(secur32.dll) 2)获取每个正在运行的进程的登录会话ID. [首先我们需要将SeDebugPrivilege启用到当前应用程序.] > GetCurrentProcess(kernel32.dll) [然后检索我们想要的数据.] > EnumProcesses(psapi.dll) 3)设置交叉点基数 interactiveSessionsCount = | { sessionData.LoginID } ∩ { accessTokenStatistics.AuthenticationId } | Obs:sessionData.LoginID和accessTokenStatistics.AuthenticationId都是LUID类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何从DOS命令窗口进行复制粘贴
- windows-phone-7 – 支持芒果蓝牙的API?
- 我可以在Windows上运行Mac模拟器或Objective-C环境吗?
- windows下的WAMP环境搭建图文教程(推荐)
- 树莓派teamviewer远程 windows远程桌面
- supermicro – 4TB HGST SATA驱动器在Windows Server 2012中
- windows-services – 使用pscp.exe时跳过主机检查
- 我对Windows裸机系统/映像备份与文件备份的理解是否正确?
- 在IIS中使用Windows身份验证托管WCF服务,无需匿名访问
- windows-store-apps – 集成bing map的windows store app在
- windows – 可以将Robocopy配置为仅记录“错误”
- windows – WIN32:让执行到另一个(给定)线程
- xaml – 在开发Windows 8 Store应用程序时处理不
- 如何为.net应用程序模拟低内存?
- windows – 如何使用批处理文件获取文件的属性
- .net – 错误:[Microsoft] [ODBC驱动程序管理器
- powershell – Win32_OperatingSystem.FreePhysi
- windows – 如何使用LaTeX编写路径?
- windows – WDM驱动程序,KMDF驱动程序和UMDF驱动
- vbscript – 在Windows上使用VBS处理MS Word