Екран BSoD з кольором, що відрізняється від синього може збентежити кого завгодно, і я готовий посперечатися, що вам було б цікаво підібрати свій колір і потім показати його своїм друзям. Варто відзначити, що описані мною кроки для зміни кольору BSoD проробляються вручну і зачіпають тільки сеанс завантаження, так що вони підходять для демонстрацій, а не для загальної настройки BSoD.
підготовка системи
Оскільки нам доведеться змінити код ядра, перший крок полягає в дозволі редагувати код ядра в пам`яті, якщо це раніше не було зроблено. Системи Windows з менш ніж 2 Гб ОЗУ використовують сторінки об`ємом 4 Кб для зберігання коду ядра, завдяки чому можна забезпечити необхідний рівень захисту для вмісту. Наприклад, сторінки даних ядра повинні дозволяти доступ на читання і запис, в той час як код ядра повинен надавати доступ тільки для читання і виконання.
Відео: Ремонт комп`ютера Синій екран смерті що робити
В рамках оптимізації, яка дозволяє збільшити швидкість трансляції віртуальних адрес, Windows використовує великі сторінки (4 Мб на x86 і x64) на великих системах. Це означає, що якщо в сторінці зберігається і код, і дані, то ця сторінка повинна представляти доступ на читання, запис і виполненіе- так що для того, щоб гарантувати можливість редагування сторінки, ви повинні забезпечити використання Windows великих сторінок.
Якщо у вас Windows XP або Windows Server 2003 і менше 256 Мб ОЗУ, або Windows Vista або старше і є 2 Гб ОЗУ або менше, створіть значення REG_DWORD з назвою LargePageMinimum, яке встановлено в 1, в гілці реєстру HKLM System CurrentControlSet Control Session Manager Memory Management:
Щоб вам не треба було поспішати похвалитися результатами своєї роботи поки Windows автоматично НЕ перезавантажиться після збою, поміняйте налаштування автоперезагрузка. На Windows XP і Server 2003 клацніть правою кнопкою миші на значку «Мій комп`ютер», виберіть вкладку «Додатково» і натисніть кнопку «Параметри» в розділі «Завантаження і відновлення».
На Windows Vista і вище клацніть правою кнопкою миші на значку «Комп`ютер» в меню Пуск, виберіть «Властивості», натисніть «Додаткові параметри системи», перейдіть на вкладку «Додатково» і натисніть кнопку «Параметри» в розділі «Завантаження і відновлення». Зніміть прапорець з пункту «Виконувати автоматичне перезавантаження»:
Якщо ви працюєте на 64-розрядної версії Windows Vista або вище, вам потрібно завантажити систему в режимі налагодження, щоб можна було запустити відладчик ядра в режимі «local». Ви можете зробити це або натиснувши F8 під час завантаження системи і вибравши режим налагодження, або поставивши прапорець «Налагодження» в утиліті «Конфігурація системи» (Msconfig):
Далі перезавантажте систему і запустіть відладчик з правами адміністратора. Налаштуйте відладчик на сервер символів Microsoft, відкривши діалогове вікно «Symbol Search Path» з меню Файл і введіть наступний рядок: srv * c: symbols * http: //msdl.microsoft.com/download/symbols (замініть c: symbols на шлях до локальної папці, в якій відладчик повинен зберігати кешированниє символи). Далі відкрийте діалогове вікно «Kernel Debugging" з меню Файл, виберіть вкладку «Local» і натисніть OK:
Наступні кроки відрізняються в залежності від того, працюєте ви з 32-розрядної або 64-розрядної Windows і від версії Windows.
32-розрядна Windows XP і Windows Server 2003
Функція, яка відображає BSoD на цих операційних системах, називається KeBugCheck2. Ви шукайте місце, де функція передає значення кольору функції, яка заливає фон екрану - InbvSolidColorFill. Введіть команду «u kebugcheck2», щоб вивести початок функції, потім вводите команду «u», щоб перегорнути додаткові сторінки коду функції до тих пір, поки ви не побачите посилання на InbvSolidColorFill (після першого введення «u», ви можете просто натиснути Enter, щоб повторити команду). Вам потрібно буде пропустити 30-40 сторінок до того, як ви побачите цей запит:
Перед цим запитом ви побачите інструкцію «push», що використовує як аргумент 4, як показано на малюнку вище. Скопіюйте адресу коду цієї інструкції, вибравши його з шпальти адреси зліва і натиснувши Ctrl + C. Потім в командному вікні налагоджувача введіть «eb», потім Ctrl + V, щоб вставити адресу, потім "+1" і натисніть Enter. Отладчик увійде в режим редагування пам`яті, починаючи з адреси значення кольору. Тепер ви можете вибрати колір, який ви хочете . 1 - це червоний, 2 - зелений, ви також можете поекспериментувати, щоб отримати інший колір. Просто введіть число і натисніть Enter двічі, щоб підтвердити введення, після чого вийдіть з режиму редагування. Ось як приблизно має виглядати екран, після того як ви закінчите:
64-розрядні версії Windows і 32-розрядні версії Windows Vista або вище
На цих версіях Windows функція ядра для відтворення BSoD називається KiDisplayBlueScreen. Введіть «u kidisplaybluescreen» і потім продовжуйте вводити команди «u», щоб пропустить сторінки з кодом функції, до тих пір, поки ви не побачите виклик InbvSolidColorFill. На 32-розрядних версіях Windows продовжите дотримання інструкцій, наведених в розділі Windows XP / Server 2003, щоб знайти і відредагувати значення кольору.
На 64-розрядних версіях цих операційних систем інструкція, що передує викликом InvbSolidColorFill, передає колір, так що скопіюйте її адресу (номер в лівій колонці), а потім введіть команду для початку редагування: «eb
+4 ». Отладчик перейде в режим редагування пам`яті, і ви зможете змінити значення (наприклад, 1 для червоного, 2 для зеленого):Перегляд результату
Тепер ви готові до збою системи. Якщо ви працюєте на 64-розрядної Windows, ви можете викликати збій без будь-яких додаткових дій. Kernel Patch Protection помітить модифікацію і викличе збій системи як засіб стримування діяльності незалежних вендорів, які могли б вирішити підправити код ядра, щоб змінити його поведінку. Однак на це може знадобитися кілька хвилин.
Щоб викликати збій системи на вимогу, запустіть утиліту Notmyfault (ви можете завантажити її з веб-сторінки Windows Internals) і натисніть кнопку «Do Bug» (щоб уникнути втрати даних, переконайтеся, що ви зберегли будь-яку роботу і закрили всі інші додатки):
З`явиться BSoD в кольорі, який ви вибрали, в даному випадку це «червоний екран смерті»:
святковий BSoD
У дусі наступаючих свят, я зробив ще один крок і створив святковий BSoD: я поміняв не тільки колір фону, але і колір тексту. Щоб зробити це на 64-розрядних версіях Windows Vista або вище, знайдіть виклик InvbSetTextColor відразу після InvbSolidColorFill і адреса інструкції, яка передає колір тексту функції, «move ecx, 0Fh»:
Параметр 0Fh означає білий колір, але ви можете змінити його, використовуючи все ту ж методику редагування. Використовуйте команду «eb», передаючи адресу інструкції плюс 1. Нижче я встановив червоний колір (який має значення 1):
А ось і святковий BSoD, який я створив:
Щасливих вам свят! І пам`ятайте, якщо у вас були якісь випадки діагностики проблем, якими ви хочете поділитися, будь ласка, надсилайте мені скріншоти (переважно .jpg) і файли журналу.