Пару недель назад я впервые принял участие в презентации на
конференции Microsoft Tech-Ed перед аудиторией свыше 5000 слушателей.
Старший вице-президент по маркетингу Windows Билл Вегте вел эту презентацию и
рассказывал об ориентированных на пользователя функциях Windows 7, а старший
менеджер по Windows Server Иен Макдональд продемонстрировал новые функциональные
возможности Hyper-V и Windows Server 2008 R2. Я, в свою очередь, рассказывал об
ориентированных на IT-профессионалов улучшениях в Windows 7 и Microsoft Desktop
Optimization Pack (MDOP).
Я показал такие функции, как настройки групповых политик в
BitLocker To Go, возможности удаленного управления и создания скриптов для
объектов групповых политик в PowerShell v2, Microsoft Enterprise Desktop
Virtualization (MEDV) , а также то, как App-V, перемещаемые профили
пользователей и перенаправление папок дают возможность осуществить замену ПК с
минимальными вынужденными потерями времени. Отдельно я остановился на том, что
мы прилагаем все усилия, чтобы разработанные IT-профессионалами для Vista
исправления, касающиеся совместимости приложений (мы их называем "прокладками",
shims), также работали бы на Windows 7. Кроме этого, я продемонстрировал работу
новой функции Windows 7 под названием
AppLocker, которая на основе гибкой системы правил по определению программ
помогает IT-профессионалам ограничивать список тех приложений, которые
пользователи могут запустить на корпоративных машинах.
В течение нескольких недель, предшествовавших презентации, я работал с
Джейсоном Лезнеком, отвечавшим за ту ее часть, которая предназначена для
IT-профессионалов, чтобы выделить функции, которые я должен был показать и чтобы
правильно подобрать демонстрационные материалы. Мы проводили репетиции по
сценарию, изменяя наполнение демонстрации и создавая переходы, а также урезая
информационное содержание, чтобы уложиться в отведенные мне временные рамки,
помимо этого мы стремились сделать так, чтобы моя речь была четче акцентирована
на тех преимуществах, которые дают новые технологии. Для демонстрации по
вопросам совместимости приложений мы решили использовать стандартную внутреннюю
программу Microsoft под названием Stock Viewer, намеренно относящуюся к той
группе присутствующего сегодня на рынке прикладного ПО, которое несовместимо с
Vista и Windows 7 и не может быть запущено на этих новых операционных системах
без посторонней помощи. В ходе демонстрации я запускал Stock Viewer на Windows 7
и показывал постоянные сообщения об ошибках, которые выдает эта программа из-за
несовместимости:
Далее я показывал, как устанавливать прокладку для обеспечения совместимости,
позволяющую программе корректно работать под Vista и успешно перезапускать ее.
Мы также хотели показать, как мастер создания правил в AppLocker облегчает
процесс запуска приложений исходя из информации об издателе или о версии, если
ПО имеет цифровую подпись. Сначала мы хотели показать AppLocker после
демонстрации, посвященной совместимости приложений, и в качестве примера
использовать Adobe Acrobat Reader, поскольку им часто пользуются в различных
компаниях. Мы провели пару прогонов презентации по этому сценарию, однако всякий
раз нам казалось, что переходы были несколько неуклюжими, и поэтому я предложил,
чтобы мы поставили демонстрацию об AppLocker перед демонстрацией Stock Viewer. Я
мог бы запускать Stock Viewer через правило AppLocker и показывать работу
прокладки, используя обе демонстрации.
Когда я вернулся к себе в свой офис, я поставил на Stock Viewer цифровую
подпись Sysinternals и отослал программу Джейсону. Несколько часов спустя он
сообщил мне через электронную почту, что что-то не так с демонстрационной
системой, потому как Stock Viewer, который до этого запускался мгновенно, теперь
тратил на запуск около минуты. Близилось начало TechEd и он был в панике,
поскольку мы должны были уже заканчивать составление демонстрации. Мне
доводилось слышать о том, что .NET инициирует проверку цифровой подписи при
загрузке подписанных приложений, так что мое первое подозрение пало именно на
это. Я попросил Джейсона зафиксировать следы при помощи Process Monitor и он
отослал мне результаты уже несколько минут спустя.
После того, как я открыл лог, первое, что я сделал - это отфильтровал события
для StockViewer.exe, найдя его первую операцию и кликнув по ней правой кнопкой
мыши для установки быстрого фильтра:
После этого я посмотрел на время первого события (2:27:20) и последнего
события (2:28:32), между которыми как раз и была та минутная задержка, о которой
сообщил Джейсон. Просматривая весь лог, я обнаружил много записей, относящихся к
шифрованию ключей реестра и папкам файловой системы, а также к указаниям на
настройки TCP/IP, однако среди них должна была быть хотя бы одна запись,
ответственная за столь существенную задержку. В конце концов, я обнаружил
десятисекундный разрыв после отметки 2:27:22:
Непосредственно перед разрывом находились ссылки на сетевой DLL-файл
Rasadhlp.dll, а до этого – многочисленные указания на ключи реестра Winsock, с
доступом к зашифрованным ключам реестра сразу после десятисекундной задержки.
Складывалось такое ощущение, что система не была подключена к Интернету, и что
приложение сдерживалось десятисекундным тайм-аутом сети. Я стал смотреть дальше
и обнаружил следующий 12-секундный разрыв:
Снова та же ситуация – сетевая активность до паузы и обращение к
зашифрованным ключам реестра после нее. Следующий (тоже 12-секундный) разрыв
демонстрировал аналогичную картину:
Несколько последующих разрывов выглядели полностью идентичными. В каждом из
случаев сразу после паузы была ссылка на HKCU\Software\Microsoft\Windows\CurrentVersion\Internet
Settings\Connections, так что я установил фильтр по этому ключу и RegOpenKey, в
результате чего получил шесть временных промежутков по 12 секунд каждый:
Их сумма – 6 раз по 12 секунд, как раз и давала ту задержку, которую увидел
Джейсон. Далее я захотел убедиться, что эти повторяющие попытки получить доступ
к сети были вызваны проверкой цифровой подписи, и потому начал проверять стеки
различных событий, выбирая их и нажимая Ctrl-K для открытия диалогового окна
свойств стека. Стек событий, связанных с настройками Интернет-соединения,
показал, что причиной было именно шифрование:
Последнее, в чем мне оставалось убедиться – это в том, что ответственность за
эти проверки целиком лежала на .NET. Пересмотрев лог, я убедился, что Stock
Viewer действительно является .NET-приложением:
Я также взглянул на стеки некоторых более ранних событий, связанных с
обращениями к зашифрованным ключам реестра и увидел, что они представляли собой
вызовы процедуры WinVerifyTrust из рабочей среды.NET. Эта функция Windows
позволяет проверить цифровую подпись файла, а ее вызов инициировал
многочисленные попытки доступа к Интернет:
Удостоверившись, что задержка запуска была вызвана .NET, пытающимся проверить
через Интернет, не отозван ли сертификат у файла Stockviewer.exe, я начал искать
в Сети способ миновать проверку .NET, так как во время презентации
использующийся для нее компьютер, скорее всего, не будет подключен к Всемирной
паутине. Пару минут почитав заметки, авторами которых были люди, столкнувшиеся с
аналогичной проблемой, я обнаружил эту
статью из базы знаний Microsoft.
В ней были описаны приведенные мною симптомы, а также указан способ,
позволяющий отключить обязательную проверку цифровой подписи в .NET 2.0 (именно
с этой версией я и имел дело). Для этого надо было создать конфигурационный файл
в том же каталоге и с тем же именем, что и исполняемый компонент, за исключением
расширения ".config" (StockViewer.exe.config), после чего добавить туда
следующий XML-код:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
В итоге, через 15 минут после того, как я получил электронное письмо от
Джейсона, я отослал ему сообщение со своими выводами и вложенным
конфигурационным файлом. Вскоре он прислал мне ответ, где сообщил, что задержки
исчезли, и выразил свое изумление по поводу того, насколько быстро мне удалось
решить проблему. Ему это могло показаться какой-то магией, однако я просто
воспользовался Сетью и Process Monitor, чтобы разрешить ситуацию. Нет нужды
говорить, что обновленная версия демонстрации и переход между AppLocker и
совместимостью приложений прошли успешно.
Оригинал:
http://blogs.technet.com/markrussinovich/archive/2009/05/26/3244913.aspx
Читай так же:
Знаток изнанки операционных систем: Марк
Руссинович
Windows Defender: история одного торможения
История пропавшего автозапуска
История случаных падений IE и WMP
Копирование: простая сложность
История неизвестного Автостарта
Руткит от Sony: история в деталях