Как использовать функцию особого пула для изоляции повреждение пула

Переводы статьи Переводы статьи
Код статьи: 188831 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

Повреждение пула может вызвать многие из наиболее evasive проблемы, связанные с повреждение пула в Windows NT. происходит в том случае, если в режиме ядра компонент записывает в память за пределами области выделенного пула. Путем записи память за границу выделенной области, то, скорее всего, другой область памяти, возможно, принадлежащий другому компоненту будет перезаписан. Это повреждение может привести к проблемам например синих экранов в совершенно не связанных между собой участки кода. Компонент ядра, чтение за пределы выделенной области можно Кроме того, возникают неполадки.

Ли она вызвана вычислительной Драйверы производителей (OEM) или проблем в Windows, пул повреждений затруднения Некоторые из наиболее сложных для идентификации. Как правило, все операции, можно увидеть в аварийный дамп анализа является признаком реальную проблему, такие как области данных все поврежденные и вызывает проблемы в совершенно несвязанные блока кода. До сих было практически невозможно найти сегмент кода которая повреждает память.

Теперь можно определить источник повреждение пула инструкция вызывает повреждение пула. Новая программа управления памяти то есть именованные особого пула включается с Windows NT 4.0 с пакетом обновления 4 (SP4), Windows 2000 Windows XP Windows Server 2003, Windows Vista и Windows Server 2008. Утилита особый пул Определение компонента в режиме ядра, разорвал пула данных путем записи память за пределами его выделенной области.

Примечание Корректировка памяти не применяется к Windows Vista и Windows Server 2008. Однако функция особого пула применяются для этих продуктов.

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

Важные Этот раздел, метод или задача содержит действия, о том, как внести изменения в реестр. Тем не менее при неправильном изменении реестра, могут возникнуть серьезные проблемы. Таким образом Убедитесь, что внимательно выполните следующие действия. Для дополнительной защиты резервную копию реестра перед внесением изменений. Затем при возникновении неполадок можно восстановить реестр. Для получения дополнительных сведений о том, как резервное копирование и восстановление реестра щелкните следующий номер статьи базы знаний Майкрософт:
322756 Резервное копирование и восстановление реестра Windows


Специальная программа пула Выделяет две страницы виртуальной памяти для каждого запрашиваемого выделения через ExAllocatePoolWithTag, соответствует следующим критериям:
  • Запрос на выделение памяти должен быть меньше Максимальное выделение, которое помещается в пул страницы.
  • Запрос должен соответствовать спецификации PoolTag в реестр.
Для обнаружения переполнения пула первая страница используется для хранения Распределение в конце страницы. Вторая страница — это страница защиты. Для Обнаружение опустошения пула, первая страница — это страница защиты. За ним следуют страница, содержащая выделения в начале страницы.

Определение переполнения является вероятно наиболее часто используемые. Для обнаружения переполнения Запрошенный выделения располагается в конце первой страницы путем резервного копирования размер запроса в конце страницы. Размер округляется до 8-байтовой границе. Раздел шаблона, размер и сведения о тегах пулов запись заголовка в первые восемь байтов первой страницы. Шаблон также распространяется по всему страницы. Поскольку распределение находится на ближайшего 8-байтовой границе может быть как семь последующих байтов slop распределение. Шаблон также записаны последующих байтов slop распределение.

Вторая страница — это страница защиты. Страница защиты состоит из элемента таблицы специальных страниц (PTE), помеченную как нет доступа Защита. Пометив второй страницы с защитой доступа нет, любой код Попытка чтения или записи в конец первой страницы сразу за пределы приводит к Нарушение прав доступа в Stop 0x0000000A или ошибка Stop 0x0000001E. Это позволяет кому-либо отладка системы для поиска точных инструкций что приводит к повреждению пула.

Для перехвата Нарушители, которые записывают резервного копирования проверки за пределами выделения, но не за пределами страницы, slop байты в конце выделения проверяются во время запроса пул свободных носителей (ExFreePoolWithTag). Slop байт, сравниваются с шаблоном в Заголовок распределения определение любые перезаписывается в области slop байт. Если проверка не работает, ошибка Stop 0x00000001A имеет место.

Эта проверка не обязательно найти точное блок код, вызывающий повреждение пула. Тем не менее она может помочь определить компонент что приводит к повреждению.

Чтобы включить средство особого пула, добавьте следующие разделы и значения реестра:
Управление Manager\Memory HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session


Имя параметра: PoolTag
Тип данных: REG_DWORD
Данные: Маска тегов пула | Маска размера выделения | 0
Маска тегов пула является идентификатор тега пула, содержащего маскирование символы пула, в котором требуется разместить в особый пул. Эта маска необходимо указать в шестнадцатеричном формате в обратном порядке. Этот шаблон также может содержать "?" для маскирования одного символа или "*" маски здесь до конца тега. Например чтобы отслеживать все пулы с тега пула, который начинается с «Nt», укажите "2A744E" (без кавычек), который представляет собой «* tN ".

В в приведенной ниже таблице перечислены дополнительные примеры.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Спецификация маски размера выделения помещает все распределения пула из Указанный размер особого пула. Также задается в шестнадцатеричном формате. Например, если все распределения 32 байта расположены в особый пул Укажите 0x20.

Если задан ноль (0x0) программа особый пул не инициализирован. Кроме того программа особого пула не инициализируется при значение параметра реестра PoolTag не определен в реестре.
Имя параметра: PoolTagOverruns
Тип данных: REG_DWORD
Данные: 1 | 0
значение 1 указывает, что для обнаружения переполнения распределения пула Указанный тег. Выделение находится в конце страницы и защиты страница выглядит следующим образом.

значение 0 указывает, что для обнаружения underruns распределения пула тег. Выделение находится в начале страницы и страницы защиты предшествует страницу, содержащую распределение.

Типичные примеры использования для создания эти два ключа в реестре будет выглядеть следующим образом:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Управление памятью


Имя параметра: PoolTag
Тип данных: REG_DWORD
Данные: 0x2A

Имя параметра: PoolTagOverruns
Тип данных: REG_DWORD
Данные: 1


Примечание Для Windows NT 4.0 сервер терминалов необходимо отключить KStackPool При использовании особого пула. Для этого добавьте следующий параметр реестра:
Управление Manager\Memory HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session


Имя параметра: EnableKStackPool
Тип данных: REG_DWORD
Данные: 0

1 -KStack пул всегда включено
2 -KStack пула включено для компьютеров с 256 МБ или больше память (по умолчанию)
Если вы не делаете это изменение по терминалов Компьютеры сервера, 256 МБ или больше памяти, может появиться «STOP 0x00000078 (PHASE0_EXCEPTION) «сообщения об ошибках.


Примечание Функция особого пула может работать в Windows Server 2003, при наличии записей в таблице недостаточно специальных страниц (PTE). Эта проблема обычно возникает на серверах терминалов одного пользователя, содержащие более 1 ГБ оперативной памяти и имеют значения настройки управления памяти компьютера, установка значений по умолчанию. Эта проблема возникает в 64-разрядных версиях Windows Server 2003.

Анализ файла дампа памяти проблемы могут содержать следующую информацию:
*** Virtual Memory Usage *** 
Physical Memory: 1015660 ( 4062640 Kb) 
Page File: \??\C:\Pagefile1\pagefile.sys 
Current: 4193280Kb Free Space: 4180856Kb 
Minimum: 4193280Kb Maximum: 4193280Kb 
Available Pages: 552680 ( 2210720 Kb) 
ResAvail Pages: 932179 ( 3728716 Kb) 
Locked IO Pages: 347 ( 1388 Kb) 
Free System PTEs: 187166 ( 748664 Kb) 
Free NP PTEs: 32765 ( 131060 Kb) 
Free Special NP: 117228 ( 468912 Kb) 
Modified Pages: 106 ( 424 Kb) 
Modified PF Pages: 98 ( 392 Kb) 
NonPagedPool Usage: 6599 ( 26396 Kb) 
NonPagedPool Max: 65536 ( 262144 Kb) 
PagedPool 0 Usage: 10697 ( 42788 Kb) 
PagedPool 1 Usage: 1240 ( 4960 Kb) 
PagedPool 2 Usage: 1239 ( 4956 Kb) 
PagedPool 3 Usage: 1265 ( 5060 Kb) 
PagedPool 4 Usage: 1231 ( 4924 Kb) 
PagedPool Usage: 15672 ( 62688 Kb) 
PagedPool Maximum: 90112 ( 360448 Kb) 
Shared Commit: 3866 ( 15464 Kb) 
Special Pool: 511 ( 2044 Kb) <-- very small
Shared Process: 5205 ( 20820 Kb) 
PagedPool Commit: 15672 ( 62688 Kb) 
Driver Commit: 2091 ( 8364 Kb) 
Committed pages: 439832 ( 1759328 Kb) 
Commit limit: 2023823 ( 8095292 Kb)

0: kd> dd nt!MmSpecialPoolRejected l8 
8057afe0 00000000 00000000 00b2e59a 00000000 <-- A DWORD value of 3 causes special pool PTE's shortage.
8057aff0 00000000 00000000 00000000 00000000

8057afd8 nt!MiSpecialPoolFirstPte = 0xc022af78
8057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
Проблему можно проверить по размеру особого пула, который выделяется из анализа. В этом случае поведение наблюдается, поскольку следующий особый пул PTE объекты равны:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Эта проблема также возникает значение записи реестра MmSpecialPoolRejected трех или большего размера.

Чтобы обойти эту проблему, настройте значение записи реестра PagedPoolSize значение, которое меньше, чем размер выгружаемого пула, который разрешен. Например, присвойте PagedPoolSize значение 256 МБ. Если вы хотите настроить большее значение, программа системный монитор для определения потребность больший размер выгружаемого пула на компьютере.

Можно использовать следующие значения параметра PagedPoolSize реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory управления
Для Windows Server 2003 без пакета обновления:

Имя параметра: PagedPoolSize
Тип данных: REG_DWORD
Данные: 10000000
Основание: шестнадцатеричный

Для Windows Server 2003 с пакетом обновления 1 (SP1):

Имя параметра: PagedPoolSize
Тип данных: REG_DWORD
Данные: FFFFFFFF
Основание: шестнадцатеричный

Примечание После внесения любого изменения реестра, описанные в данном статьи, чтобы внесенные изменения вступили в силу, перезагрузите компьютер.

Если После включения функции особого пула, компьютер перестает отвечать на запросы (зависает), а сообщение об ошибке на синем экране во время запуска, перезагрузите компьютер, используя параметр «Загрузка последней удачной конфигурации». Включение возможности особого пула не записывается последний хорошо известные Запись конфигурации в реестре только после успешного входа в систему.

Свойства

Код статьи: 188831 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows XP Professional
  • Microsoft Windows 2000 Advanced Server
  • операционная система Microsoft Windows 2000 Server
  • Windows Vista Enterprise
  • Windows Vista Home Premium
  • Windows Vista Ultimate
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
Ключевые слова: 
kbenv kbhowto kbqfe kbmt KB188831 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:188831

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com