- Наводим порядок в Windows х86 со снятым 4 ГБ ограничением памяти после обновления KB2859537
- Установка обновления KB2859537 в Windows 7 x86
- Windows 7 с ядром ntkr128g (ReadyFor4GB)
- Windows 7 с ядром ntkrnlpх (PatchPae2)
- Установка обновления KB2859537 в Windows 8 x86
- Windows 8 с ядром ntoskrnx (PatchPae2)
- Physical Address Extension
- System Support for PAE
- Enabling PAE
- Comparing PAE and other Large Memory Support
Наводим порядок в Windows х86 со снятым 4 ГБ ограничением памяти после обновления KB2859537
Здравствуйте уважаемые читатели блога www.ithabits.ru. В прошлый раз мы разобрались с обновлением безопасности операционных систем Microsoft Windows KB2859537, после установки которого на многих компьютерах перестали запускаться некоторые программы — «Ошибка при запуске приложения (0xc0000005)».
Наиболее вероятной причиной возникших неприятностей явилось то, что KB2859537, наряду с обновлением большого количества файлов, устанавливает в систему новые ядра ОС.
Прошлая статья была в основном посвящена способу временного решения возникшей проблемы путем отмены установки приводящего к неприятностям пакета обновлений.
В силу того, что на страницах блога неоднократно описывались “исправления” ядер операционной системы Windows х86 с целью увеличения доступной физической памяти до 128 ГБ, сегодня мы разберемся с последствиями установки KB2859537 для таких систем.
Вопреки ожиданиям, установка KB2859537 в Windows x86 с ядрами со снятым 4 ГБ ограничением доступной физической памяти, модифицированными одним из описанных на страницах блога способов — ReadyFor4GB или PatchPae 2, не вызвала никаких нарушений в работе операционной системы. Все программы продолжали исправно запускаться и функционировать.
Однако, это не значит, что вмешательство не требуется. Последовательно рассмотрим возможные варианты.
Установка обновления KB2859537 в Windows 7 x86
Windows 7 с ядром ntkr128g (ReadyFor4GB)
В качестве тестового полигона используем тот же ноутбук Acer с 4 ГБ оперативной памяти и Windows 7 Professional, работа которого с модифицированным ядром, то есть, со снятым 4 ГБ ограничением доступной физической памяти, подробно описывалась в статье, посвященной вопросам использования верхнего диапазона памяти в 32-разрядных системах.
Скажу по большому секрету, что после подготовки материалов той январской статьи, вот уже восемь месяцев ноутбук так и проработал с “поправленным” ядром. Он достаточно активно эксплуатируется, но за все это время не возникло никаких неприятностей.
Непосредственно после установки обновления безопасности KB2859537 в C:\Windows\System32 присутствуют следующие PAE ядра:
ntkrnlpa Версия: 6.17601.18205 Дата: 09.07.2013
ntkr128g Версия: 6.17601.17713 Дата: 09.02.2012
В секции BCD, описывающей загрузку Windows с модифицированным ядром, после установки обновления ничего не изменилось:
Загрузка Windows
——————-
идентификатор
device partition=C:
path \Windows\system32\winload.exe
description Microsoft Windows [Version 6.1.7601] [128GB with ntkr128g.exe]
locale ru-RU
inherit
recoverysequence <4b790165-хххх-11df-98db-faхххххх1839>
recoveryenabled Yes
testsigning Yes
osdevice partition=C:
systemroot \Windows
kernel ntkr128g.exe
resumeobject <4b790163-хххх-11df-98db-faхххххх1839>
nx OptIn
pae ForceEnable
Таким образом, с одной стороны, обновление KB2859537 установилось, с другой стороны, в варианте без ограничения доступной физической памяти система продолжает работать со старым ядром, в котором присутствуют все обнаруженные уязвимости. Это совершенно не правильно.
Если ReadyFor4GB.exe не откажется работать, то исправить ситуацию достаточно просто.
Запускаем компьютер в обычном режиме, удаляем старое ядро ntkr128g.exe версии 6.17601.17713 и запускаем ReadyFor4GB.exe (Надо же, все еще работает. Возможно, что далеко не у всех. Поэтому, сначала убедитесь в работоспособности этого приложения):
Создаем новое “поправленное” ядро. Теперь набор будет выглядеть так:
ntkrnlpa Версия: 6.17601.18205 Дата: 09.07.2013
ntkr128g Версия: 6.17601.18205 Дата: 23.08.2013
Теперь все правильно. Очевидно, что в BCD ничего править не нужно.
Перезапускаем компьютер с новым ntkr128g.exe версии 6.17601.18205 и убеждаемся, что вся физическая память вновь доступна и что все программы и приложения исправно функционируют.
Windows 7 с ядром ntkrnlpх (PatchPae2)
Должен сразу сказать, что, как и в предыдущем случае, я планировал использовать для тестирования этого варианта патча ядра ноутбук Acer. Связка PatchPae2 + PatchPae2cmd отработала безукоризненно, однако компьютер с ядром, полученным таким способом, отказался загружаться категорически. В процессе загрузки запускалось средство диагностики неисправностей, работа которого ничем положительным не заканчивалась.
В конце концов я сдался и обратился к виртуальной машине Windows 7 x86 на Oracle VirtualBox.
До установки обновления KB2859537 в Windows/System32 можно найти следующие интересующие нас ядра:
ntkrnlpa Версия: 6.1.7601.17514 Дата: 21.11.2010
ntkrnlpx Версия: 6.1.7601.17514 Дата: 21.11.2010
Если установку обновления KB2859537 выполнить в сеансе с загрузкой “исправленного” ядра ntkrnlpx, то версии ядер изменятся следующим образом:
ntkrnlpa Версия: 6.1.7601.18205 Дата: 09.07.2013
ntkrnlpx Версия: 6.1.7601.17514 Дата: 21.11.2010
На первый взгляд все правильно, однако в данном случае инсталлятор KB2859537 повел себя крайне неадекватно в отношении вариантов загрузки. Если посмотреть содержимое BCD, запустив от имени администратора BCDEdit.exe без параметров, то окажется, что обе секции загрузки указывают на не обновленное ядро ntkrnlpx.
Если у вас возникла подобная ситуация, то для ее исправления придется отредактировать BCD в редакторе.
Запустим BCDEdit от имени администратора и выполним следующие команды:
Указываем путь до “родного” загрузчика:
bcdedit /set
Удаляем все дополнительные значения, необходимые для загрузки модифицированного ядра:
bcdedit /deletevalue
bcdedit /deletevalue
bcdedit /deletevalue
bcdedit /deletevalue
Находим
bcdedit /delete
exit
Перезагружаем компьютер. Убеждаемся, что все нормально запускается и работает. Теперь можно повторно создать модифицированное ядро с поддержкой до 128 ГБ физической памяти.
Перезагружаем компьютер. Смотрим получившийся набор ядер:
ntkrnlpa Версия: 6.1.7601.18205 Дата: 09.07.2013
ntkrnlpx Версия: 6.1.7601.18205 Дата: 09.07.2013
Вот теперь все в порядке. Можно наслаждаться доступностью всей установленной физической памяти компьютера с Windows 7 x86 и не иметь при этом обнаруженных в старом ядре уязвимостей.
Внимание! Не используйте патч, который называется 4GB-7600_RTM_x86. Эта программа не создает новое PAE ядро системы со снятым ограничением доступной физической памяти на основе актуального на данный момент, а просто записывает в \System32 некое очень старое “готовое” ядро. Во-первых, именно такое ядро может привести к проблемам после установки обновления безопасности KB2859537. Во-вторых, даже если Windows будет работать и программы не перестанут запускаться, то в с системе останутся обнаруженные уязвимости. Это категорически неправильно.
Установка обновления KB2859537 в Windows 8 x86
Windows 8 с ядром ntoskrnx (PatchPae2)
Первая часть тестирования была выполнена в 32-разрядной виртуальной машине Windows 8 в VirtualBox.
Исходный набор ядер такой:
ntoskrnl Версия: 6.2.9200.16604 Дата: 04.05.13
ntoskrnx Версия: 6.2.9200.16604 Дата: 04.05.13
После установки пакета обновлений KB2859537:
ntoskrnl Версия: 6.2.9200.16659 Дата: 11.07.13
ntoskrnx Версия: 6.2.9200.16604 Дата: 04.05.13
В отличие от Windows 7, после установки обновления в BCD все осталось как нужно и править ничего не пришлось.
В этом случае возможны два варианта приведения системы в соответствие желаемому:
Первый вариант. Удаляем из \System32 устаревшее ядро ntoskrnx версии 6.2.9200.16604 и создаем новое. Для этого нужно выполнить первый пункт инструкции, приведенной в этой статье, а именно, запустить в командной строке с повышенными привилегиями (Win + x), PatchPae2.exe со следующими ключами:
C:\PatchPae2.exe -type kernel -o ntoskrnx.exe ntoskrnl.exe — в данном примере PatchPae2.exe скопирована в корень диска C:\.
Второй вариант. Его целесообразно использовать если по какой-либо причине необходимо вернуть загрузку Windows в исходное состояние.
Загружаем компьютер в обычном режиме (со стандартным ядром). В командной строке с правами администратора выполняем следующие команды:
bcdedit /set
bcdedit /default
bcdedit
Находим
Для выполнения всех действий, за исключением переименования описания, можно воспользоваться оснасткой Конфигурация системы («Win + x» –> Выполнить –> msconfig –> Загрузка):
Нужно установить текущую исходную систему загружаемой по умолчанию (этот пункт можно выполнить и непосредственно при старте в окне выбора варианта загрузки).
Далее нужно перенести фокус на альтернативный вариант загрузки и удалить его:
Перезагрузите Windows и убедитесь, что все в порядке.
Далее можно повторить PathPae2cmd в результате чего будет создан новый набор ядер ОС с соответствующими вариантами загрузки:
ntoskrnl Версия: 6.2.9200.16659 Дата: 11.07.13
ntoskrnx Версия: 6.2.9200.16659 Дата: 11.07.13
Виртуальная машина Windows 8 x86 загрузилась c новым “поправленным” ядром без каких бы то ни было проблем и увидела всю выделенную ей память – 4 ГБ.
Мне этого показалось недостаточно, кроме того, я давно обещал протестировать работу 32-разрядной Windows 8 со снятым 4 ГБ ограничением доступной памяти на физическом компьютере. Очень подходящий момент наконец это сделать. Результаты тестирования в следующей статье.
Напоминаю, что для того, чтобы скачать готовый командный файл PathPae2cmd, достаточно просто подписаться на обновления блога по E-Mail. Ссылка на скачивание будет в почтовом подтверждении подписки.
Physical Address Extension
Physical Address Extension (PAE) is a processor feature that enables x86 processors to access more than 4 GB of physical memory on capable versions of Windows. Certain 32-bit versions of Windows Server running on x86-based systems can use PAE to access up to 64 GB or 128 GB of physical memory, depending on the physical address size of the processor. For details, see Memory Limits for Windows Releases.
The Intel Itanium and x64 processor architectures can access more than 4 GB of physical memory natively and therefore do not provide the equivalent of PAE. PAE is used only by 32-bit versions of Windows running on x86-based systems.
With PAE, the operating system moves from two-level linear address translation to three-level address translation. Instead of a linear address being split into three separate fields for indexing into memory tables, it is split into four separate fields: a 2-bit bitfield, two 9-bit bitfields, and a 12-bit bitfield that corresponds to the page size implemented by Intel architecture (4 KB). The size of page table entries (PTEs) and page directory entries (PDEs) in PAE mode is increased from 32 to 64 bits. The additional bits allow an operating system PTE or PDE to reference physical memory above 4 GB.
In 32-bit Windows running on x64-based systems, PAE also enables several advanced system and processor features, including hardware-enabled Data Execution Prevention (DEP), non-uniform memory access (NUMA), and the ability to add memory to a system while it is running (hot-add memory).
PAE does not change the amount of virtual address space available to a process. Each process running in 32-bit Windows is still limited to a 4 GB virtual address space.
System Support for PAE
PAE is supported only on the following 32-bit versions of Windows running on x86-based systems:
- WindowsВ 7 (32 bit only)
- Windows ServerВ 2008 (32-bit only)
- WindowsВ Vista (32-bit only)
- Windows ServerВ 2003 (32-bit only)
- WindowsВ XP (32-bit only)
Enabling PAE
Windows automatically enables PAE if DEP is enabled on a computer that supports hardware-enabled DEP, or if the computer is configured for hot-add memory devices in memory ranges beyond 4 GB. If the computer does not support hardware-enabled DEP or is not configured for hot-add memory devices in memory ranges beyond 4 GB, PAE must be explicitly enabled.
To explicitly enable PAE, use the following BCDEdit /set command to set the pae boot entry option:
bcdedit /set [
IF DEP is enabled, PAE cannot be disabled. Use the following BCDEdit /set commands to disable both DEP and PAE:
bcdedit /set [
bcdedit /set [
Windows ServerВ 2003 and WindowsВ XP: To enable PAE, use the /PAE switch in the boot.ini file. To disable PAE, use the /NOPAE switch. To disable DEP, use the /EXECUTE switch.
Comparing PAE and other Large Memory Support
PAE, 4-gigabyte tuning (4GT), and Address Windowing Extensions (AWE) serve different purposes and can be used independently of each other:
- PAE allows the operating system to access and use more than 4 GB of physical memory.
- 4GT increases the portion of the virtual address space that is available to a process from 2 GB to up to 3 GB.
- AWE is a set of APIs that allows a process to allocate nonpaged physical memory and then dynamically map portions of this memory into the virtual address space of the process.
When neither 4GT nor AWE are being used, the amount of physical memory that a single 32-bit process can use is limited by the size of its address space (2 GB). In this case, a PAE-enabled system can still make use of more than 4 GB of RAM to run multiple processes at the same time or to cache file data in memory.
4GT can be used with or without PAE. However, some versions of Windows limit the maximum amount of physical memory that can be supported when 4GT is used. On such systems, booting with 4GT enabled causes the operating system to ignore any memory in excess of the limit.
AWE does not require PAE or 4GT but is often used together with PAE to allocate more than 4 GB of physical memory from a single 32-bit process.