Сначала определим, что вызвало проблему: установка нового пакета исправлений, в документации на который говорилось что-то о новом сетевом редиректоре, или, может быть, драйвер обновления NIC?
Утилита, о которой я хочу рассказать, не входит в комплект Microsoft Windows Resource Kit. Driver Verifier содержится как в Windows 2000 Professional, так и в Windows 2000 Server. Название обманчиво: Driver Verifier - не просто драйвер верификации, он тщательно проверяет файлы, сообщая Windows 2000 о состоянии любого модуля режима ядра системы. Утилита Driver Verifier представляет собой средство, которое позволяет эффективно производить проверку любых низкоуровневых компонентов системы. Для запуска утилиты Verifier следует нажать Start, Run, затем набрать Verifier и нажать Enter, после чего появится окно Driver Verifier Manager. Теперь нужно указать закладку Settings, откроется окно Drivers currently active in the system («активные в данный момент драйверы»). Список включает такие драйверы, как, например, classpnp.sys (поддержка Plug-and-Play - PnP), efs.sys (Encrypting File System, EFS - кодировка файловой системы) и fastfat.sys (32-разрядная FAT-поддержка), которые скорее можно назвать аппаратными драйверами, хотя они и являются важнейшими частями ОС.
Windows 2000 и Windows NT работают либо в режиме ядра, либо в режиме пользователя. Модули режима ядра (Kernel-mode) - обычно более значимые, но они могут случайно повредить области памяти программ режима ядра. Такое повреждение ведет к разрушению программы и запуску голубого экрана, а определить, какой именно модуль произвел повреждение, трудно. ОС контролирует состояние модулей режима пользователя (user-mode) более тщательно, чем модулей ядра: когда модули режима пользователя пытаются перезаписать свои области памяти, система останавливает их и выдает предупреждение, запуская Dr. Watson.
Утилита Verifier предписывает ОС наблюдать за установленным драйвером или модулями режима ядра системы куда более тщательно, почти так же, как если бы они были частями режима пользователя. Verifier будет следить за тем, каким образом модуль обращается к системе, и проверять ошибочные или нелегальные запросы памяти или вызовы API. Кроме того, утилита проверит память модулей после выгрузки драйверов, просматривая оставшиеся, но не завершенные операции, например незаконченные операции I/O.
Если поставить флажок Special pool (особый пул) в Verification type (тип проверки), система распределит память драйвера в неиспользованной области памяти, помеченной как nobody reads, nobody writes («никто не читает, никто не пишет»). Так, если драйверы создают помехи в назначенной им области памяти, Windows 2000 немедленно обнаружит проблему, выведет голубой экран и укажет, какая часть ядра вызывает ошибку.
Если выбрать Pool tracking (слежение за пулом), Verifier будет наблюдать за памятью, которую модуль ядра занимает, но никогда не освобождает - ошибка, известная как memory leak (утечка памяти). При режиме слежения за пулом модуль, вызывающий сбой, снимается, и система выводит голубой экран. (Этот параметр слишком плохо работает с приложениями режима пользователя, среди которых есть наиболее разрушительные.) Также рекомендуется указывать флажок Force IRQL checking (обязательная проверка IRQL), контролирующий состояние приложений, которые могут попытаться получить доступ к областям выгружаемой памяти (т. е. к выделенным областям памяти, помещенным в файл подкачки и, следовательно, недоступным). Такие приложения тоже часто вызывают ошибки, которые трудно обнаружить. Можно не выбирать Low resources simulation (имитационный режим «нехватка ресурсов»), который произвольно сообщает приложению ядра о нехватке памяти. Этот параметр является хорошим тестом, но он значительно замедляет систему, а правильно написанные приложения ядра должны уметь функционировать при недостатке памяти. Тем не менее следует выбрать I/O verification (проверка ввода/вывода) и установить для него уровень 2. Этот параметр специально направлен на идентификацию нарушений при операциях ввода/вывода: например, голубой экран может содержать строку BugCheck 0xC9 (DRIVER_VERIFIER_ IOMANAGER_VIOLATION).
Наконец, после того, как введены или изменены установочные параметры Verifier, систему нужно перезагрузить.
За все приходится платить: использование драйвера Verifier немного замедлит систему, и чем больше контролируемых драйверов, тем медленней система работает. Способность Verifier идентифицировать вызывающий ошибку модуль ядра позволит протестировать новый сервер или программное обеспечение новой системы прежде, чем потребуется установить их в сети. Рекомендую изолировать новый сервер или программное обеспечение и выполнять Verifier в течение нескольких дней. Это позволит застраховаться от всевозможных неожиданностей в будущем.
ОБ АВТОРЕ
Марк Минаси - редактор Windows NT Magazine, MCSE и автор книги «Mastering Windows NT Server 4.0» (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com.