Конфиденциальные сведения о WindowsВызывая доктора Ватсона

Рэймонд Чен (Raymond Chen)

Вы могли заметить, что если запросить программу Dr. Watson (drwtsn32.exe) получить дамп памяти процесса Winlogon, то Windows® выключается, как только эта операция выполнится. Некоторые могли бы поинтересоваться: «почему присоединение отладчика к процессу Winlogon обрушивает всю систему?»

Дело в том, что запуск доктора Ватсона на некоторый процесс это совсем не то же самое, что присоединение к этому процессу отладчика. Присоединение отладчика включает использование чего-то вроде ntsd, и при наличии нужных полномочий это нормально работает. Фактически именно так команда разработчиков Windows отлаживает Winlogon. Таким образом, формально можно ответить, что «присоединение отладчика к Winlogon не разрушает систему».

Однако доктор Ватсон — не врач, а патологоанатом. Сначала он должен получить дамп памяти процесса с ошибкой, а потом завершить этот процесс. Поскольку служебная программа «Доктор Ватсон» не устраняет ошибки, то если процесс продолжит работу, сбой произойдет снова. В результате опять будет вызван доктор, что замкнет бесконечный цикл. В этом смысле доктор Ватсон – это отладчик, который ничего не отлаживает. Добрый доктор просто появляется на сцене, делает нужные записи, а затем уничтожает процесс. Так и происходит: после снятия дампа памяти процесс Winlogon завершается, что приводит к краху системы.

Если завершить процесс Winlogon, система перезагрузится.

Если завершить процесс Winlogon, система перезагрузится.  (Щелкните изображение, чтобы увеличить его)

Winlogon является тем, что называется «критическим системным процессом», и прекращение работы критического процесса приводит к перезапуску системы. Почему же Winlogon считается критичным для работы системы? Прежде всего, Winlogon обрабатывает специальное сочетание клавиш — Ctrl+Alt+Del. Если Winlogon завершится, специальное сочетание клавиш перестанет работать. Это плохо само по себе, но еще хуже то, что в отсутствие системного обработчика специального сочетания клавиш, другая программа может дождаться, пока пользователь нажмет Ctrl+Alt+Del и показать в ответ поддельный диалог ввода пароля. Не очень хорошо то специальное сочетание клавиш, реакцию на которое можно подделать. В качестве меры защиты Windows завершает свою работу, чтобы не ухудшить уже достаточно плохую ситуацию.

Если вы теперь запустите диспетчер задач, выделите критический системный процесс вроде Winlogon, выберите «Завершить процесс» и подтвердите свое решение, то вот, елки-палки, вы только что завершили Winlogon, и система перезагрузится (если, конечно, вы работаете под учетной записью администратора и имеете достаточно прав, чтобы завершить этот процесс).

В предыдущих версиях Windows диспетчер задач пытался предотвратить завершение критического процесса, но алгоритм определения критических процессов был не очень умным. Кроме того, это позволяло подменить диспетчер задач и создать программу, которую, казалось бы, нельзя завершить. Конечно, на самом деле программу завершить было бы можно, нужно было просто воспользоваться другим средством, отличным от диспетчера задач. (Например, можно было бы попробовать программу taskkill).

Чтобы не быть подделанным, диспетчер задач больше не пытается предотвратить завершение критических системных процессов. В конце концов, чтобы не сделать что-то неправильно, лучше вообще этого не делать. Так что диспетчер задач больше не стоит у вас за спиной, когда вы завершаете процессы. И не бьет вас по рукам, когда вы пытаетесь завершить что-то, что лучше бы не трогать. Если вы решили остановить критический системный процесс, вам придется принять последствия этого.

Рэймонд Чен (Raymond Chen) на своем веб-узле The Old New Thing (Хорошо забытое старое) и в книге с таким же названием (издательство Addison-Wesley, 2007 г.) рассказывает об истории развития Windows и касается вопросов программирования в среде Win32. Однако он не рассматривает проблемы механизмов ввода в действие.

© 2008 Корпорация Майкрософт и компания CMP Media, LLC. Все права защищены; полное или частичное воспроизведение без разрешения запрещено.