我的应用程序在 Windows Server 2008 下作为服务运行。我正在寻找一种检测活动控制台会话的方法。这可以是控制台或作为管理会话(“mstsc /admin”)启动的 RDP 会话。
控制台会话称为“控制台”,但我迷失了 RDP 会话。在 Windows 2003 下,这很容易,因为控制台会话总是以 id 0 运行。这在 Vista 之后发生了变化,所以我正在寻找另一种方法来找出答案。
我已经检查了 WTSxxx Win32 API,但没有找到我要找的东西。
有人可以帮忙吗?
我的应用程序在 Windows Server 2008 下作为服务运行。我正在寻找一种检测活动控制台会话的方法。这可以是控制台或作为管理会话(“mstsc /admin”)启动的 RDP 会话。
控制台会话称为“控制台”,但我迷失了 RDP 会话。在 Windows 2003 下,这很容易,因为控制台会话总是以 id 0 运行。这在 Vista 之后发生了变化,所以我正在寻找另一种方法来找出答案。
我已经检查了 WTSxxx Win32 API,但没有找到我要找的东西。
有人可以帮忙吗?
如果您要查找当前附加到物理控制台的会话 ID,则 API 为WTSGetActiveConsoleSessionId
一种选择是将您的服务CanHandleSessionChangeEvent
设置为 true 然后实施OnSessionChange(SessionChangeDescription changeDescription)
如果ChangeDescription.Reason == SessionChangeReason.ConsoleConnect
有人连接到控制台。
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
if(changeDescription.Reason == SessionChangeReason.ConsoleConnect)
{
//use changeDescription.SessionId to find if the logged in user
// to that session is an administrator.
}
}