Версия антивирусного программного обеспечения от Symantec - AntiVirus Corporate Edition 8.0 – может привести к аварийному останову операционных систем Windows XP, Windows 2000 и Windows NT. В одном случае система "падает" со стоп-кодом 0x0000007F и сообщением UNEXPECTED_KERNEL_MODE_TRAP. В другом случае она может просто перезапуститься безо всякого предупреждения. Согласно статье Microsoft "You Receive a 'Stop 0x0000007F' Error Message or Your Computer Unexpectedly Restarts" оба сценария аварийного завершения работы систем имеют место при одновременной работе антивирусного программного обеспечения от Symantec и программы оперативного реплицирования NSI Double-Take. Впрочем, и при "автономной" работе указанной антивирусной программы, и в сочетании с другими приложениями результат один и тот же – аварийный останов.

Проблема возникает в том случае, если драйвер сканирования ядра не может выделить буфер для отображения в памяти компьютера дискового файла. Если в системе недостаточно памяти для работы в режиме ядра - Kernel Mode Memory - NTFS не в состоянии выделить необходимый буфер, а иногда и буфер для идентификации сложившейся ситуации. Система аварийно завершает работу со стоп-кодом 0x07F. Останов системы, который может затронуть различные драйверы ядра, чаще всего происходит в системах на 128 Мбайт и менее, а также при интенсивных операциях ввода/вывода.

Дэйв Димлоу (Dave Demlow), вице-президент NSI, указал на то, что останов систем не связан с работой программы Double-Take и не возникает в тех системах, где работает только эта программа или же еще какая-либо программа от независимого поставщика. «В ответ на ошибку, допущенную разработчиками Symantec, - сказал Димлоу, - в состав программного обеспечения NSI Double-Take разработчики включили дополнительный код защиты, который распознает ситуации, при которых продукты "третьих фирм" обнаруживают непомерные аппетиты по отношению к системному стеку». При этом Double-Take временно приостанавливает свои операции и записывает в системный журнал соответствующее сообщение, чтобы сберечь ресурсы системного стека, предотвращая тем самым аварийный останов системы. Стоит также отметить, что специалисты Microsoft внесли исправления в ту часть кода Windows Server 2003 и Windows 2000 SP4, которая отвечает за работу ядра файловой системы с системным стеком и снижает риск возникновения описанной проблемы.

Symantec выпустила исправление своей ошибки (и его уже можно установить на компьютер) для защиты системы от аварийного останова/перезапуска. Гарантируется, что драйвер попросит NTFS выполнить отображение файла только в том случае, когда в системе зарезервирован адекватный объем памяти ядра. По умолчанию в Windows 2000 установлен нижний предел памяти режима ядра, равный 12 Кбайт, однако в ряде случаев этого недостаточно. Symantec вводит в реестр новый параметр, который предписывает антивирусному драйверу не обращаться к файловой системе на предмет выделения буфера, если память в системе на исходе. Когда в реестре появляется параметр KstackMinFree, антивирусный драйвер сначала проверит объем доступной памяти в ядре и уже только потом (по результатам проверки) будет решать, надо ли запрашивать у NTFS отображение файла. Драйвер обратится к NTFS в том случае, когда для ядра системы доступно не менее KstackMinFree килобайт памяти. Если памяти меньше, чем указано в значении параметра, сканирование файла будет пропущено.

Если на вашей станции работает Symantec Antivirus Corporate Edition, установить аналогичное управление поведением драйвера можно вручную – посредством сценария, который запускается локально, или же при помощи групповой политики. Для ручной установки надо запустить редактор реестра и отыскать HKEY_LOCAL_MACHINE\SOFTWARE\Symantec\Norton AntiVirus NT\Auto-Protect\InternalSettings. Затем следует добавить параметр KstackMinFree (тип данных REG_DWORD) с шестнадцатеричным значением 2200. Диапазон значений этого параметра - от 5Kбайт (0x1400) до 9Kбайт (0x2400), в зависимости от стандартной системной конфигурации. Слишком маленькое значение KstackMinFree может привести к переполнению стека и зависанию системы. Слишком большое значение параметра приведет к тому, что фильтрующий драйвер начнет пропускать файлы. Если установить 0 или значение, превышающее 0x2400, онлайновые драйверы будут игнорировать значение параметра KstackMinFree и станут всегда запрашивать выделение буфера.

Для активизации внесенных изменений нужно перезагрузить компьютер или перезапустить службу антивирусного сканирования. Службы Symantec в списке Services list обозначены как Norton AntiVirus Client, Norton AntiVirus Server, Symantec AntiVirus Client или Symantec AntiVirus Server – все зависит от конкретной версии программного обеспечения, установленного на компьютере.

Загрузить реестровый сценарий, который добавляет параметр KstackMinFree и устанавливает его равным 0x2200, можно с сайта Symantec по адресу http://service1.symantec.com/support/ent-security.nsf/949e46314f0916a0852565d00073bbfd. Специалисты Symantec утверждают, что данный параметр реестра, обуславливающий работу с памятью системы, влияет только на сканирование файлов, обращающихся к ядру операционной системы, но не затрагивает сканирование файлов, работающих в пользовательском режиме, а значит, сканер реального времени всегда сканирует файлы, к которым происходит обращение в режиме пользователя.

Паула Шерик - Редактор Windows & .NET Magazine и консультант по вопросам планирования, реализации и взаимодействия сетей. С ней можно связаться по адресу: paula@winnetmag.com.