Программно определять консольный (административный) сеанс в Windows Server 2008? - PullRequest
2 голосов
/ 08 февраля 2011

Мое приложение работает как служба под Windows Server 2008. Я ищу способ обнаружить активный сеанс консоли.Это может быть либо консоль, либо сеанс RDP, запущенный как сеанс администрирования ("mstsc /admin").

" Консоль "называется" Консоль ", но я теряюсь в сеансах RDP.В Windows 2003 это было легко, потому что консольный сеанс всегда выполнялся с идентификатором 0. Это изменилось с Vista, поэтому я ищу другой способ выяснить.

Я уже проверил WTSxxx Win32 API, но имеюне нашел то, что я ищу.

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Если вы ищете идентификатор сеанса, который в данный момент подключен к физической консоли, API имеет значение WTSGetActiveConsoleSessionId

0 голосов
/ 08 февраля 2011

Один из вариантов - установить для вашей службы 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.
    }
}
...