OpenInputDesktop () всегда возвращает 0 при запуске в сервисе Windows - PullRequest
0 голосов
/ 07 февраля 2020

У меня следующий код, работающий в службе Windows, работающей от имени LOCAL_SYSTEM:

        protected override void OnSessionChange(SessionChangeDescription changeDescription)
        {
            if (changeDescription.Reason == SessionChangeReason.SessionLock)
            {
                IntPtr inputDesktop = OpenInputDesktop(0, false, ACCESS_MASK.GENERIC_ALL);

                if (inputDesktop == null)
                {
                    int error = Marshal.GetLastWin32Error();
                    Library.WriteErrorLog("inputDesktop is NULL. Error:" + error);
                }
                else    
                    Library.WriteErrorLog("inputDesktop:" + inputDesktop.ToString());

            }
            else if (changeDescription.Reason == SessionChangeReason.SessionUnlock)
            {
            }
        }

Код запускается, когда рабочий стол Windows заблокирован (WIN + L). Однако переменная inputDesktop всегда заканчивается нулевым числом. Это не дескриптор рабочего стола Winlogon Secure, как я ожидаю. В частности, мой журнал всегда содержит запись следующего содержания: inputDesktop:0

Следует отметить, что OpenInputDesktop () работает правильно, так как функция не возвращает ноль. Но я не понимаю, почему возвращается 0.

Я в тупике. Нужно ли настраивать мой сервис для работы в качестве интерактивного сервиса или что-то в этом роде? Нужно ли устанавливать какие-то особые разрешения для службы Windows, чтобы определить дескриптор для защищенного рабочего стола?

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...