У меня следующий код, работающий в службе 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, чтобы определить дескриптор для защищенного рабочего стола?
Спасибо за любую помощь.