Диалоговые службы, оконные станции и рабочие столы
октября 12 2009 by admin in СлужбыСоздавая тот или иной объект ядра, вы можете указать, как его следует защищать, передав адрес структуры SECURITY_ATTR[BUTES. А как быть с пользовательскими объектами, такими как окна или меню? У этих объектов другая модель применения, они не открываются и не закрываются, вы лишь осуществляете к ним доступ, что упрощает программу и повышает производительность. Более того, пользовательские объекты в 16-разрядных ОС Windows вообще не поддерживают защиту ни в каком виде. Если бы Microsoft добавила структуру SECURITY_ATTRIBUTES в CreateWindow и CreateMenu, разработчики бы испытывали трудности с переносом своих 16-разрядных приложений.
Microsoft должна была найти такой способ защиты пользовательских объектов, который не повлиял бы на существующие функции и способы применения этих объектов. Это было сделано с помощью оконных станций и рабочих столов. Оконная станция — это логическая комбинация клавиатуры, мыши и дисплея. Слово «логическая» здесь означает, что эти устройства не обязательно должны существовать на самом деле. Загружаясь, ОС создает диалоговую оконную станцию «WinStaO»; физические клавиатура, мышь и дисплей назначаются этой диалоговой оконной станции. Оконная станция также имеет свой собственный буфер обмена, набор элементарных объектов и группу объектов рабочих столов.
Рабочий стол состоит из поверхности логического дисплея и набора пользовательских объектов: окон, меню и перехватчиков событий. С рабочими столами также связываются потоки. (См. функции SetThreadDesktop и Get'Thread-Desktop в документации Platform SDK.) Если поток, связанный с садним рабочим столом, пытается послать сообщение в окно, созданное на другом рабочем столе, система выдает ошибку. Это и есть механизм защиты в действии. Точно так же поток не может установить перехватчик событий в потоке, который является частью другого рабочего стола.
Рабочие столы, как и окопные станции, указываются посредством их текстовых имен. Процесс WinI.ogon.cxe создает три рабочих стола: WiiiLogon выдает диалоговое окно для регистрации в системе; после того, как пользователь зарегистрируется, WinLogon.exe переключается на рабочий стол Default; Default место, где появляются Explorer.exe и окна пользовательских приложений; когда бы ни работало приложение, оно исполняется на этом рабочем столе; Screen saver запускает хранитель экрана системы, когда пользователь не осуществляет активности в течение определенного периода времени.
Сама система имеет собственную пользовательскую учетную запись. Поэтому в любой момент на машине работают два ♦пользователя»: «пользователь» Local-System и зарегистрировавшийся. Конечно же, если на одной машине работают приложения двух пользователей, вы не захотите, чтобы окна всех приложений отображались на одном физическом дисплее; каждый из пользователей будет недоволен тем, что выводит на его экран другой.