Недавно один из компьютеров в локальной сети нашей компании стал выдавать синий экран смерти при попытке сохранить документы по сети. Для начала я проверил систему на вирусы и шпионское ПО, но не обнаружил ничего серьезнее пары-тройки нежелательных файлов cookie и нескольких всплывающих окон.
Удалив весь мусор и снова тщательно просканировав систему, я подумал было, что проблема решена, но все дальнейшие попытки сохранения документов из приложений MS Office на сетевые диски снова привели к возникновению синего экрана с вот такой ошибкой:
No_More_IRP_Stack_Size_Locations
Отправившись в Интернет на поиски решения, я обнаружил массу информации о программных конфликтах при использовании разных антивирусов одновременно, однако после удаления всех дополнительных антивирусных сканеров проблема никуда не делась. При этом создание, копирование и перемещение файлов на сетевых дисках при помощи Проводника (Windows Explorer) работало без проблем.
Изменение значения «IRP_StackSize»
Дальнейшие розыски подсказали мне два способа решения проблемы, одно из которых предусматривает изменение значения параметра «IRP_StackSize» на локальном компьютере и на сервере в ключе реестра «HKEY_LOCAL_MACHINE\CurrentControlSet\Services\LanManServer\Parameters\IRPStackSize».
Обнаружив, что в реестре проблемной системы такого ключа не существует, я создал параметр DWORD с десятичным значением «15» для начала. После перезагрузки ошибка повторилась при попытке сохранить файлы на сетевой диск DFS. Я несколько раз изменял значение созданного параметра на локальной машине, увеличивая его по 5, но это не помогло. Потом выяснилось, что в сетях с поддержкой DFS размер стека определяется другим параметром, расположенным в ключе «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mup\Parameters».
Параметра «DFSIrpStackSize» в реестре тоже не обнаружилось. Я его создал и присвоил ему максимальное значение «10». После перезагрузки мне удалось сохранить документы из приложений MS Office напрямую на сетевой диск DFS безо всяких проблем.
По умолчанию, этому параметру реестра присваивается значение «5». Другое допустимое значение — «10», а при вводе любого большего числа значение автоматически сбрасывается до «5». Ниже последовательно описывается, как я добавил в реестр нужный параметр и решил проблему.
Предупреждение: В нормальных обстоятельствах редактировать реестр не рекомендуется. Если без этого не обойтись, обязательно создайте резервную копию реестра, прежде чем вносить какие-либо изменения. Для редактирования необходимы права администратора.
1. Вызовите диалоговое окно «Выполнить» (Run) из меню «Пуск» (Start). 2. Введите «regedit» (без кавычек) и нажмите «OK». 3. Найдите раздел «HKEY_LOCAL_MACHINE» и разверните узел «System». 4. Найдите ключ «CurrentControlSet | Services | MUP | Parameters». 5. Если параметра «DFS IrpStackSize» не существует, щелкните правой кнопкой мыши и выберите опцию «Создать | Параметр DWORD» (New | DWORD). 6. Присвойте ему имя «DFSIrpStackSize» (без кавычек, с сохранением орфографии). 7. Нажмите [Enter], чтобы сохранить новый параметр. 8. Нажмите на нем правой кнопкой мыши и выберите опцию «Изменить» (Modify), чтобы изменить значение параметра. 9. Измените систему исчисления на десятичную (Decimal) и введите значение «16», как показано на рис. A. 10. Нажмите «OK», чтобы сохранить новое значение, и закройте Редактор реестра. 11. Перезагрузите компьютер, чтобы изменения вступили в стилу.
Рисунок A. Изменение значения параметра «DFSIrpStackSize».
На моем проблемном компьютере была установлена Windows XP Service Pack 3 со всеми нужные исправлениями. Для систем, работающих под Windows XP Service Pack 2, требуется не только отредактировать реестр, но и установить исправление, которое описывается в этой справочной статье Microsoft: http://support.microsoft.com/kb/906866.
Если учесть, что в процессе расследования мне попадались многочисленные сведения о конфликтующих антивирусах, способных вызывать аналогичные проблемы, я продолжу наблюдать за развитием ситуации и расскажу, если возникнут какие-то новые трудности. Но на данный момент редактирование ключей реестра, связанных с IRP, помогло мне решить проблему, не изменяя конфигурации системы, что очень удобно. Надеюсь, эта статья поможет и вам, если вдруг вы столкнетесь с аналогичными ошибками системы.