2012-04-26 102 views
1

远程桌面连接到现有会话的远程桌面会话事件触发NPLogonNotify的网络提供商。但有没有一种方法,我可以找出它是一个登录事件还是连接到现有会话的事件?有没有办法检测NPLogonNotify

回答

1

LsaGetLogonSessionData从登录会话ID中返回终端服务会话ID。所以你可以尝试用WTSConnectState调用WTSQuerySessionInformation。幸运的是,结果将区分你所关心的两种情况。

如果不是,并且如果您在从NPLogonSession返回之前不需要知道答案,则可以观察与调用NPLogonSession相关的终端服务会话会发生什么,可能使用WTSRegisterSessionNotification

我相信,如果用户连接到现有会话,从NPLogonNotify终端服务会话将返回到空闲或侦听状态。此外,NPLogonNotify调用中的登录会话将被关闭。您可以通过调用LsaEnumerateLogonSessions来枚举登录会话。

如果用户收到一个新的会话,我认为,从NPLogonNotify调用同一个终端服务会话将被使用,因此将进入活跃状态。通常有也将启动一个或多个进程被从调用NPLogonNotify登录会话ID相关联。您可以通过使用GetTokenInformation与TokenStatistics查询类确定与进程相关联的登录会话,如MSDN词汇"logon identifier"下描述。

需要注意的一个额外复杂因素是:如果用户是管理员,并且UAC已启用,则会有两次调用NPLogonNotify,一次与限制用户令牌关联,另一次与提升的用户令牌关联。本地和远程登录都是如此。

相关问题