tia*_*014 3 language-agnostic windows winapi windows-services
我正在编写一个Windows服务,需要知道当前是否有任何用户在计算机中登录.
到目前为止,我已经试过Win32_LogonSession(WMI),和LsaEnumerateLogonSessions/ LsaGetLogonSessionData(找到Secur32.dll).
两者都工作,并且似乎返回相同的数据,但是当用户注销时它们太慢而无法更新:
因此Win32_LogonSession和LsaEnumerateLogonSessions都足够好.服务需要在最后一个交互式用户离开后的5分钟内知道.
甚至连SysInternals的LogonSessions.exe都没有给出最新的答案.
此外,答案不能是"监视登录和注销事件并具有计数器变量",因为该服务可以随时启动.
我最终得到了以下方法:计算至少有一个进程在运行的交互式会话的数量.
[首先我们需要将SeDebugPrivilege启用到当前应用程序.]
[然后检索我们想要的数据.]
interactiveSessionsCount = | { sessionData.LoginID } ? { accessTokenStatistics.AuthenticationId } |
Run Code Online (Sandbox Code Playgroud)
Obs:sessionData.LoginID和accessTokenStatistics.AuthenticationId都是LUID类型.
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |