Event ID 2011: “Not enough server storage is available to process this command” при опит за достъп на компютър през мрежата (SMB)

“Много отдавна останалите не могат да достъпват моя компютър през мрежата” – това беше обяснението на потребителя Х.

Когато се опитах да видя споделените ресурси на неговата машина получих следната грешка: “Not enough server storage is available to process this command”. Погледнах и в логовете (нещо, което доста малко хора правят…а е толкова лесно?). Масовото съобщение в System частта беше:

——————————————

Event Type:Error
Event Source:Srv
Event Category:None
Event ID:2011
Date:xyz
Time:xyz
User:N/A
Computer:theComputer
Description:
The server’s configuration parameter “irpstacksize” is too small for the server to use a local device. Please increase the value of this parameter.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Data:
0000: 00 00 00 00 01 00 50 00 ……P.
0008: 00 00 00 00 db 07 00 c0 ….Û..À
0010: 00 00 00 00 00 00 00 00 ……..
0018: 00 00 00 00 00 00 00 00 ……..
0020: 00 00 00 00 00 00 00 00 ……..

——————————————

IRPStackSize определя с колко стек локации (една стеклокациясъдържа 36 байта)ще разполага един IRP (I/O Request Packet). По подразбиране IRPStackSize е 15 (0xF). Диапазонът, в който може да варира тази стойност е от 11 (0xB) до 50 (0x32).

Проблемът идва от хардуерния модел, който използва Windows. За управление на хардуера се изисква драйвер. Само че в случая той не е един, а съвкупност от драйвери, които образуват драйверен стек. Отделните драйвери комуникират помежду си чрез т.нар. I/O Request Packet-и. Но един IRP е общ за целия стек и “пътувайки” между отделните драйвери стек локациите намаляват.
Някои софтуерни решения инсталират допълнителни драйвери към съответния драйверен стек. Това увеличава вероятността стек локациите да се изчерпят. Примери за такъв тип продукти: антивирусен софтуер, софтуер за образи/съхранение (imaging/backup)
Доста добро описание за това може да намерите в този форум: http://forum.sysinternals.com/forum_posts.asp?TID=22059(писанието на потребителя snoone)

В случая с услугата “Server” (srv.sysси едрайвер) става дума за буферите при приемане (receive buffers/work items).

Решенията на проблема са две:

  1. Деинсталиране на антивирусния софтуер или софтуера за imaging (потребителят имаше и двете), но това едва ли е приемливо;
  2. Да се увеличи стойността на IRPStackSize.

Вариант 2 е най-удачен. Точната стойност на IRPStackSize се определя на базата на опит/грешка. Ето примерен алгоритъм:

Информация за IRPStackSize (името е case sensitive!!!):

Път: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
Име: IRPStackSize
Тип: DWORD

* Ако не виждате такава стойност трябва да я създадете ръчно;
** Бъдете внимателни, когато променяте стойности в системния регистър. Всяка грешка може да възпрепятства нормалната работа на операционната система.

  1. Увеличавате стойността (увеличението не трябва да е голямо, примерно 4 и е добре крайната стойност да е кратна на 2)
  2. Рестартирайте Server Service
  3. Пробвайте да достъпитекомпютъра през мрежата
  4. Ако получите същата грешка или в Event лога (раздел System) присъства отново съобщение 2011 се върнете на стъпка 1

В моя случай стойност от 30 (0x1E) реши проблема. При всички случаи не прекалявайте, защото всяко увеличение довежда до по-голяма консумация на ресурси. Освен това се знае за проблеми при задаване на стойности за IRPStackSize в диапазона от 33 до 38.

Оказва се, че този проблем съществува още от времето на NT 3.xx и е свързан с антивирусните програми. Те инсталират доста драйвери, чрез които наблюдават файловия трансфер и мрежовата активност.

Допълнителна информация:

Leave a Reply

Your email address will not be published. Required fields are marked *

*