2.Внутреннее устройство Windows (гл. 5-7)
2.Внутреннее устройство Windows (гл. 5-7) читать книгу онлайн
Продолжение книги "Внутреннее устройство Microsoft Windows" — 5 и 7 главы.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Основной поток Smss выполняет следующие инициализирующие операции.
1. Создает объект «порт LPC» (SmApiPort) и два потока, ожидающие клиентские запросы (например, на загрузку новой подсистемы или на создание сеанса).
2. Определяет символьные ссылки на имена устройств MS-DOS (вроде COM1 и LPT1).
3. Если установлены Terminal Services, создает в пространстве имен диспетчера объектов каталог Sessions (для нескольких сеансов).
4. Запускает программы, указанные в HKLMSYSTEMCurrentControlSetCon-trolSession ManagerBootExecute. Как правило, в нем содержится одна команда на зaпycк Autochk (версия Chkdsk, работающая на этапе загрузки).
5. Выполняет отложенные действия по переименованию и удалению файлов, указанные в разделах HKLMSYSTEMCurrentControlSetControlSession ManagerPendingFileRenameOperations и HKLMSYSTEMCurrentControlSetControlSession ManagerPendingFileRenameOperations2.
6. Открывает известные DLL и создает для них объекты «раздел» в каталоге Knowndlls пространства имен диспетчера объектов. Список DLL, считаемых известными, находится в разделе HKEY_LOCAL_MACHINESYSTEM CurrentControlSetControlSession ManagerKnownDLLs, а путь к каталогу, где расположены эти DLL, хранится в параметре Dlldirectory этого раздела. Об использовании разделов Known DLLs при загрузке DLL см. главу 6.
7. Создает дополнительные страничные файлы. Их конфигурация хранится в разделе HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl Session ManagerMemory ManagementPagingFiles.
8. Инициализирует реестр. Диспетчер конфигурации заполняет реестр, загружая кусты HKLMSAM, HKLMSECURITY и HKLMSOFTWARE. Хотя информация о местонахождении файлов кустов содержится в разделе HKLM SYSTEMCurrentControlSetControlHivelist, диспетчер конфигурации ищет эти файлы в каталоге WindowsSystem32Config.
9. Создает системные переменные окружения, определенные в HKLMSystemCurrentControlSetSession ManagerEnvironment.
10. Загружает часть подсистемы Windows, работающую в режиме ядра (Win32k.sys). Smss определяет местонахождение Win32k.sys и других загружаемых им компонентов по путям, хранящимся в HKLMSYSTEMCurrentControlSetControlSession Manager. Инициализирующий код в Win32k.sys использует видеодрайвер для переключения экрана в разрешение, определенное в профиле по умолчанию. Таким образом, в этот момент видеоадаптер переключается с VGA-режима, используемого загрузочным видеодрайвером, в выбранное для данной системы разрешение.
11. Запускает процессы подсистем, в том числе Csrss. (Как говорилось в главе 2, подсистемы POSIX и OS/2 в Windows 2000 запускаются по требованию.)
12.3апускает процесс Winlogon. Этапы запуска Winlogon кратко описываются ниже.
1З. Создает порты LPC для сообщений об отладочных событиях (DbgSsApiPort и DbgUiApiPort) и потоки, прослушивающие эти порты.
Тот факт, что исполняемые образы и DLL при использовании проецируются в память, делает невозможным обновление базовых системных файлов по окончании загрузки Windows. API-функция MoveFileEx позволяет указать, что перемещение файла должно быть отложено до следующей загрузки. Пакеты обновлений и критические исправления, которым нужно обновлять уже используемые файлы, проецируемые в память, устанавливают заменяющие файлы во временные каталоги и вызывают функцию MoveFileEx именно так, как говорилось чуть выше. B этом случае MoveFileEx просто записывает команды в параметры PendingFileRenameOperatiom и PendingFileRenameOperatiom2 в разделе реестра HKLMSYSTEMCurrentControlSetControlSession Manager. Эти параметры имеют тип MULTI_SZ, и каждая операция указывается парами имен файлов: первое имя — источник, а второе — приемник. B операциях удаления вместо приемника задается пустая строка. Чтобы просмотреть зарегистрированные отложенные команды переименования и удаления, используйте утилиту Pendmoves с сайта sysinternate.com.
После выполнения вышеперечисленных операций основной поток Smss переходит к бесконечному ожиданию описателей процессов Csrss и Winlogon. Поскольку от этих процессов зависит функционирование Windows, в случае их неожиданного завершения Smss вызывает крах системы. (B Windows XP и выше, если Csrss по какой-то причине завершается, крах системы вызывается ядром, а не Smss.)
Далее Winlogon продолжает инициализацию, выполняя такие операции, как создание начального объекта WindowStation и объектов рабочего стола. Если в HKLMSoftwareMicrosoftWindows NTCurrent VersionWinLogon GinaDLL указана какая-нибудь DLL, Winlogon использует ее в качестве GINA; в ином случае применяется GINA по умолчанию от Microsoft, Msgina (WindowsSystem32Msgina.dll"), которая отображает стандартное диалоговое окно входа в Windows. Затем Winlogori создает процесс SCM (диспетчера управления сервисами) (WindowsSystem32Services.exe), который загружает все сервисы и драйверы устройств, помеченные для автоматического запуска, а также запускает процесс LSASS (подсистемы локальной аутентификации) (WindowsSystem32Lsass.exe). Подробнее о запуске Winlogon и LSASS см. раздел «Инициализация Winlogon» главы 8.
После того как SCM инициализирует автоматически запускаемые сервисы и драйверы устройств, а пользователь успешно зарегистрируется в системе, загрузка считается успешно завершенной. Параметры в разделе HKLM SYSTEMSelectLastKnownGood обновляются в соответствии со значениями параметров последней удачной конфигурации (CurrentControlSet).
ПРИМЕЧАНИЕ Если на неинтерактивном сервере не бывает интерактивного входа, раздел LastKnownGood, отражающий набор управления (control set), который позволил выполнить успешную загрузку, не обновляется.
Вы можете заменить определение успешной загрузки. Для этого установите HKLMSoftwareMicrosoftWindows NTCurrentVersionWinlogonReportBootOk в 0, напишите свою программу, проверяющую успешность загрузки, и укажите путь к ней в HKLMSystemCurrentControlSetControlBootVerificationProgram. Такая программа должна вызывать API-функцию NotifyBootConfigStatus, если загрузка прошла успешно.
Запустив SCM, Winlogon ждет уведомления об интерактивном входе от GINA. Получив такое уведомление и проверив вход (об этом процессе см. в главе 8), Winlogon загружает куст реестра из профиля зарегистрировавшегося пользователя и отображает его на HKCU. Затем он настраивает переменные окружения для данного пользователя, хранящиеся в HKCUEnvironment, и направляет уведомления о входе компонентам, зарегистрированным в HKLMSoftwareMicrosoftWindows NTCurrentVersionWinlogonNotify.
Затем Winlogon сообщает GINA запустить оболочку. B ответ на этот запрос Msgina запускает исполняемый файл (или исполняемые файлы), указанный в параметре HKLMSoftwareMicrosoftWindows NTCurrentVersionWinLogonUserinit (несколько исполняемых файлов перечисляются через запятые), который по умолчанию указывает на WindowsSystem32Userinit.exe. Userinit.exe выполняет следующие операции.
1. Обрабатывает пользовательские сценарии, указанные в HKCUSoftwarePoliciesMicrosoftWindowsSystemScripts, и машинные сценарии входа, заданные в HKLMSoftwarePoliciesMicrosoftWindowsSystemScripts.
(Так как машинные сценарии выполняются после пользовательских, они могут переопределять пользовательские настройки.)
2. Если политика группы задает какую-либо квоту в профиле пользователя, Userinit.exe запускает WindowsSystem32Proquota.exe для ее применения.
3. Запускает оболочку (или оболочки), указанную в HKCUSoftwareMicrosoftWindows NTCurrentVersionWinlogonShell. Если этого параметра нет, Userinit.exe запускает оболочку (или оболочки), определенные в HKLMSoftwareMicrosoftWindowsCurrentVersionWinlogonShell (по умолчанию — Explorer.exe).
