与WTS_SESSION_LOGON通知竞争条件

在我的Windows服务中,我试图在交互式用户login到系统时执行一些特定的操作。 为此,我跟踪WTS_SESSION_LOGON通知。 不幸的是,今天我发现这个通知来自竞争条件。

例如,如果用户帐户configuration了密码,系统启动后,我的服务启动,当用户input密码时,我的服务可以接收WTS_SESSION_LOGON并处理它。

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

任何想法,如果有办法解决这个问题? 或者至less告诉用户会话会自动login?

PS。 WTS_CONSOLE_CONNECT通知发生同样的竞争情况。

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