使用WTS_SESSION_LOGON通知的竞争条件

时间:2015-05-30 05:58:30

标签: windows winapi terminal-services

在我的Windows服务中,当交互式用户登录系统时,我尝试执行某些特定操作。为此我跟踪WTS_SESSION_LOGON通知。不幸的是,今天我发现该通知带有竞争条件。

例如,如果用户帐户配置了密码,系统启动后我的服务启动,当用户输入密码时,我的服务可以收到WTS_SESSION_LOGON并处理它就好了。

当只有一个没有密码的用户帐户时,会出现问题。在启动后,系统会自动登录该用户,但我的服务可能稍后启动,因此它不会收到任何交互式用户登录通知。

知道是否有解决此问题的方法?或者至少告诉用户会话会自动登录?

PS。 WTS_CONSOLE_CONNECT通知会发生相同的竞争条件。

1 个答案:

答案 0 :(得分:1)

当您的服务启动时,它可以使用WTSEnumerateSessions()找出哪些会话已经存在以及它们当前的状态(连接,活动/登录等),然后再处理后续WTS_SESSION_CHANGEHandlerEx回调中的通知。