Книга: 2.Внутреннее устройство Windows (гл. 5-7)

Отложенные действия по переименованию файлов

Отложенные действия по переименованию файлов

Тот факт, что исполняемые образы и 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).

Далее Winlogon уведомляет зарегистрированные провайдеры сетей о входе пользователя. Провайдер сети Microsoft, маршрутизатор многосетевого доступа (Multiple Provider Router, MPR) (WindowsSystem32Mpr.dll), восстанавливает постоянные подключения к сетевому диску и принтерам, установленные пользователем; эти сопоставления хранятся в HCUNetwork и HKCU Printers соответственно. Ha рис. 5–3 показано дерево процессов, которое отображается в Process Explorer при входе до завершения Userinit.


Оглавление книги

Оглавление статьи/книги

Генерация: 1.781. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз