#windows #desktop
Вопрос:
Я смог получить дескриптор Window Station из процесса IIS и получить имя «Service-0x0» с помощью GetUserObjectInformation. Аналогично, когда я получил дескриптор рабочего стола из потока и получил имя, я получил «Рабочий стол». Я думаю, что в сервисе есть оконная станция для сеанса 0, а рабочего стола нет. Почему она существует?
IntPtr hWinSta = GetProcessWindowStation();
IntPtr hDesktop = GetThreadDesktop(GetCurrentThreadId());
GetUserObjectInformation(hWinSta, ...
GetUserObjectInformation(hDesktop, ...
Комментарии:
1. Есть рабочий стол, он просто не виден. Как использовать его в более старых версиях Windows, подробно описано на этой веб-странице
Ответ №1:
Рабочий стол все еще там. Причина, по которой он все еще существует, заключается в том, что он необходим для создания Windows (HWND) и для функционирования различных API ( SetWindowsHookEx
и т.д.). Изоляция сеанса 0 была добавлена в Vista, и существует слишком много устаревших служб, чтобы иметь возможность полностью удалить window station и desktop, эти службы полагаются на слишком много функций в USER32 и GDI32.
В Vista вы могли бы фактически переключиться на рабочий стол сеанса 0, если Windows обнаружила, что интерактивная служба требует ввода пользовательского интерфейса, но я не думаю, что эта функция существует в текущих версиях Windows.
Комментарии:
1. Спасибо за ваш ответ. Я вижу. Он существует. Я использую Windows Servier 2019. Правильно ли я понимаю, что могу его получить, но рабочий стол в сеансе 0 является неинтерактивным рабочим столом, и я не могу переключаться между ними?
2. Это то, что утверждает MSDN, да. Я не помню, когда служба переключения сеанса 0 была удалена.