что думает Microsoft


Все выполнялось на двухядерном процессоре intel. windows xp sp2 rus.

1.Начнем со случая когда у вас ядро с ACPI.
Сменить его можно: диспетчер устройств-оборудование-компьютер-"многопроцессорный компьютер с ACPI(например)-обновить драйвер-нет,не в этот раз-установка из указанного места-не выполнять поиск,я сам выберу драйвер. выбираем нужное ядро в табличке.
Существуют ядра(здесь и далее под ядром я понимаю "тип компьютера" windows а не ядро процессора ):

"Стандартный компьютер"
"Компьютер с ACPI"
"Однопроцессорный компьютер с ACPI"
"Многопроцессорный компьютер с ACPI"
"Однопроцессорный компьютер с MPS"
"Многопроцессорный компьютер с MPS"
И еще одно:
"Многопроцессорный Compaq SystemPro или 100% совместимый"


возможно придется снять галочку "только совместимые устройства". но она редко помогает. Обычно того набора ядер что будут видны в табличке достаточно. У меня например было доступно:

"Стандартный компьютер"
"Компьютер с ACPI"
"Многопроцессорный компьютер с ACPI"
"Многопроцессорный компьютер с MPS"

Если того что вам нужно в списке нет, то нужное ядро появится после изменения HardwareID: рис рис

Меняем HardwareID на

acpiapic_mp -> добавляется строка с "Многопроцессорный компьютер с ACPI"
acpipic_up -> компьютер с ACPI
acpiapic_up -> "Однопроцессорный компьютер с ACPI"
mps_mp -> "Многопроцессорный компьютер с MPS"
e_isa_up -> "Стандартный компьютер"
mps_up -> "Однопроцессорный компьютер с MPS"
возможные значения HardwareID можно посмотреть в WINDOWS\inf\hal.inf

вообще необязательно указывать HardwareID именно для искомого типа ядра. Если указать acpiapic_up то в меню выбора ядер появятся все шесть типов. после перезагрузки в диспетчере устройств -компьютер будет две записи. Одна относится к ядру на котором компьютер работает , другая след предыдущего ядра. определить какое из них активное просто. правая кнопка мыши- на активном ядре не будет слова "удалить". Я не рекомендую удалять не активное ядро. С его помощью легко менять ядро на другое снова и снова. Делаем это так: нажимаем обновить драйвер на неактивном ядре, и далее по алгоритму как указано выше. Если в списке ядер не будет нужного вы уже знаете что делать. Единственное уточнение- если вы обновляете драйвер у неактивного ядра и оно не ACPI и в списке доступных для обновления ядер нет нужного то в реестре поправлять HardwareID нужно в другом месте: HKLM\SYSTEM\CURRENTCONTROLSET\ROOT\PCI_HAL\0000. то есть если у вас активное ядро "Однопроцессорный компьютер с ACPI", а неактивное "Стандартный компьютер", и вы хотите установить другое ядро, то нужно обновлять драйвер "Стандартный компьютер"и при необходимости реестр в HKLM\SYSTEM\CURRENTCONTROLSET\ROOT\PCI_HAL\0000.

Если новое ядро не поддерживается изначально, то есть если бы вы начали установку с нуля, нажали F5 выбрали желаемое ядро и после этого установка зависла бы, то в данном случае после перезагрузки компьютер тоже не сможет загрузиться. Так , например , у меня было с компьютером на плате intel D945PSN, попытка установки с нуля на ядре "Многопроцессорный компьютер с MPS" не получилась.

2. Следующий случай более практически интересный когда у вас изначально установлено не ACPI ядро. Это может быть например ядро "Многопроцессорный компьютер с MPS", но зачастую это "Стандартный компьютер", который получается после клонирования WINDOWS. Если нам нужно обновить ядро на НЕ ACPI, то проблемы нет. Обращаемся к пункту один, в случае необходимости правим реестр в HKLM\SYSTEM\CURRENTCONTROLSET\ROOT\PCI_HAL\0000\HardwareID.

Если нам нужно обновить ядро на ACPI, то правка HardwareID и последующая перезагрузка приведет к краху. Все потому что если в предыдущем случае при обновлении драйвера windows делает нужные поправки в реестре и в системный файлах, то в этом случае только частично делаются поправки в системных файлах и все. Поэтому добавляем сами. Предположим нам нужно установить "Многопроцессорный компьютер с ACPI" заходим в реестр и создаем раздел \0001: рис

Его легко создать из \0000 заменив значения параметров DriverDesc, InfSection, MatchingDeviceId как показано на картинке, а именно:

DriverDesc = Многопроцессорный компьютер с ACPI (так как мы условились что хотим поставить для примера это ACPI ядро)
InfSection =ACPIAPIC_MP_HAL
MatchingDeviceId = acpiapic_mp

Далее создаем в реестре раздел как показано на картинке:рис
обратите внимание что параметр Driver={4D36E966-E325-11CE-BFC1-08002BE10318}\0001 должен ссылаться на 0001,а не 0000. То есть на раздел который мы создали на предыдущем шаге.

его можно достаточно быстро создать, скопировав с похожей ветки HKLM\SYSTEM\CURRENTCONTROLSET\ROOT\PCI_HAL\0000\ и заменить значения параметров как на картинке. Раздел \0000\Control содержит одну переменную :
DeviceReported = 1 тип DWORD
Раздел LogConf пустой.
Далее создаем раздел: рис

находим в дистрибутиве файл acpi.sys и копируем его в \system32\drivers\ , так как в случае не ACPI ядра его там нет.
Далее создаем в реестре раздел: рис

Далее создаем раздел: рис

Заметим параметр:
Driver={4D36E97D-E325-11CE-BFC1-08002BE10318}\0004
0004 -это раздел в который пропишем устанавливаемое сейчас нами устройство DeviceDesc=Microsoft ACPI-совместимая система. Возможно он уже занят, это выяснится ниже и что делать тоже.
создаем также здесь, два пустых раздела :
\PNP0C08\0\Control
\PNP0C08\0\LogConf

Далее создаем раздел: рис

Далее создаем раздел: рис

значение разделов 0001, 0002, 0003 итд, может так быть что 0004 как я писал выше уже занят каким либо устройством. Что делать. Поищите в разделах 0001,0002,0003 итд устройство "Встроенный динамик". пусть это будет папка 0005 удалите ее содержимое и заполните так как на картинке раздел \0004. соотвественно нужно будет вернуться в раздел в котором я обращал внимание на параметр Driver={4D36E97D-E325-11CE-BFC1-08002BE10318}\0004 и поменять на
Driver={4D36E97D-E325-11CE-BFC1-08002BE10318}\0005 . Этими манипуляциями мы создали в системе новое ядро-сырец и устройство "Microsoft ACPI-совместимая система" ,которое будет находиться в системных устройствах, как показано на картинке : рис

После перезагрузки в диспетчер оборудования-компьютер появится запись "Многопроцессорный компьютер с ACPI", помимо "Стандартный компьютер". Осталось это ядро-сырец превратить в полноценное и активировать. выберите обновить драйвер у ядра "Многопроцессорный компьютер с ACPI", в списке ядер выберите опять же "Многопроцессорный компьютер с ACPI" и после перезагрузки WINDOWS заработает на этом ядре. Удалять неактивное ядро опять же не рекомендую по аналогии с первым пунктом.

Из всего написанного можно сделать вывод, что лучше изначально устанавливать windows с ядром с ACPI , так как обновить его на любое другое можно достаточно быстро. А если выполняется операция клонирования windows и ставится ядро "Стандартный компьютер" то второе неактивное ядро удалять не нужно. так как если компьютер изначально имел ACPI ядро то потом после клонирования , можно будет вернуть обратно ядро ACPI на новой машине, путем всего лишь "обновить драйвер" .даже редакция hardwareid в этом случае зачастую не нужна.

вообще даже бывает что по три ядра как бы устанавливается в windows. одно активное и два одинаковых неактивных.
это связано с значениями чисел 0000 и 0001 в разделах
...\enum\root\acpi_hal\0000 и в параметре driver={4D36E966-E325-11CE-BFC1-08002BE10318}\0001 который в нем.
лишнее 3 ядро можно удалить, правда если просто через "удалить" в диспетчер оборудования, то оно опять определится после перезагрузки. остается через реестр.


Также хочу сказать как перед заменой ядра обеспечить пути отступления. можно загрузиться с winpe , сохранить system32\config, system32\drivers, system32\hal.dll , ntoskrnl.exe, ntkrnlpa.exe и в случае неудачи переписать файлы обратно. Но этот вариант не всегда применим, например, в случае когда бутовый раздел зашифрован с помощью drive crypt plus pack. Есть другой путь, сохраним необходимые компоненты ядра виндовс и ветку реестра которые позволят в случае краха спокойно загрузиться со старым ядром.

Сохраняем отдельно файлы hal.dll , ntoskrnl.exe, ntkrnlpa.exe, переименовываем их ----->halchk.dll , ntoschk.exe, ntknlpachk.exe. и записываем обратно в \system32
Обратите внимание, сохранить нужно не только hal.dll , ntoskrnl.exe, но и ntkrnlpa.exe , так как при замене типа компьютера с многопроцессорного на однопроцессорный и наоборот этот файл изменяется системой.

добавляем в boot.ini строку
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional RU" /fastdetect /kernel=ntoschk.exe /hal=halchk.dll

Далее переустанавливаете ядро. Перед последней перезагрузкой проверьте лежит ли acpi.sys в \system32\drivers\, Иногда при установке не ACPI ядра он удаляется и становится невозможным откат с помощью этого метода обратно к исходному ACPI ядру.

Если новое ядро не пошло , то жмете F8 выбираете пункт «загрузка последней удачной конфигурации» жмете enter и выбираете строчку где мы добавили ntoschk.exe halchk.dll.

Так же хотелось бы обратить внимание на утилиту Advanced Last Known Good которую написал Oleg V. Golub., она позволяет сохранять ветку реестра на которую ссылается HKEY_LOCAL_MACHINE\SYSTEM\Select\ LastKnownGood сколько угодно долго нетронутой.

Вот как сам автор описывает рациональность его утилиты ; Часто система
рушится при попытке программ пользовательского уровня
получить доступ к процессам ядра ОС или активизировать
драйверы или фильтры, установленные самой программой.
Но "хорошая" конфигурация уже сохранена, но не является
таковой! Причем, если программа, использующая драйверы,
запускается из StartUp или из
"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
то требуется цирковая ловкость, чтобы остановить
процесс до крушения системы.»


:) мои картинки с подписями
рис 1
рис 2
рис 3
рис 4
рис 5
рис 6
рис 7
рис 8
рис 9
рис 10
рис 11
рис 12
рис 13
рис 14

:)
теперь я знаю как еще быстрее изменить тип компьютера с "Стандартный компьютер" на "Компьютер (Многопроцессорный компьютер) с ACPI".
1.в acpi.inf закомментировать строку
ExcludeFromSelect = *

2. в hal.inf строки
%ACPIPIC_UP.DeviceDesc% = ACPIPIC_UP_HAL, ACPIPIC_UP, ACPIAPIC_UP, ACPIAPIC_MP
%ACPIAPIC_MP.DeviceDesc% = ACPIAPIC_MP_HAL, ACPIAPIC_MP, ACPIAPIC_UP
изменить на
%ACPIPIC_UP.DeviceDesc% = ACPIPIC_UP_HAL, ACPIPIC_UP, ACPIAPIC_UP, ACPIAPIC_MP E_ISA_UP, MPS_UP, MPS_MP
%ACPIAPIC_MP.DeviceDesc% = ACPIAPIC_MP_HAL, ACPIAPIC_MP, ACPIAPIC_UP, E_ISA_UP, MPS_UP, MPS_MP, ACPIPIC_UP

3. диспетчер устройств-тип компьютера-обновить драйвер-"Компьютер(Многопроцессорный компьютер) с ACPI". не перезагружаем.
4. установка нового оборудования-системные устройства-Microsoft-Microsoft ACPI совместимая система. не перезагружаем.
5. SYSTEM\Current Control Set\Enum\Root\SYSTEM удаляем подраздел в котром device desc="Microsoft ACPI совместимая система"
6. перезагрузка.готово.

Сайт управляется системой uCoz