Як викликати BSOD на Windows XP та новіших версіях?


14

Чи є спосіб програмно викликати BSOD на Windows XP та новіших версіях? Як?

До речі, лише для уточнення, це не для шкідливих цілей. Клієнт попросив таким чином вимкнути / перезавантажити термінал у своїй локальній мережі. Коли я запитав чому, вони сказали, тому що це швидше, ніж звичайне перезавантаження ... :)

(Мені цікаво, яку частину "програмно" ті люди не розуміють, хто перемістив це до Super User. Дух.)


18
Якщо ви знайдете той, який не передбачає написання драйвера, повідомте Microsoft, щоб вони могли його виправити.
Ерік

13
Гм. Це швидше, ніж звичайне перезавантаження з причини - це не обов'язково вимикатися витончено. Якщо у вас є програма, яка вимикається дуже повільно, можливо, це не буде проблемою, щоб перервати її. Якщо ви примусово вимкніть або відмовитесь від занадто близького обладнання до вводу-виводу, тоді ви можете зіпсуватись із пошкодженою файловою системою тощо. Ваша проблема, а також ...)

12
Ваш клієнт потребує інституціоналізації, а його психічні стани слідкують за медичною командою.
Дарин Димитров

9
Швидка допомога також, як правило, швидша, ніж їхати власним автомобілем до лікарні. Це не робить його бажаним способом подорожі.
FreeAsInBeer

8
Скажіть своєму клієнту натиснути і утримувати кнопку живлення протягом 6 секунд. Або просто смикати шнур живлення, це швидше.
Ганс Пасант

Відповіді:


15

Драйвер клавіатури (ів) може сказати, що викликає BSOD:

HKLM\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters

або (для старих клавіатур PS / 2)

HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

І там безліч REG_DWORDімені CrashOnCtrlScrollв 1.

Після наступної перезавантаження ви можете примусити синій екран на Ctrl+ ScrollLk+ ScrollLk. Код перевірки помилок у цьому випадку буде 0xE2 (MANUALLY_INITIATED_CRASH).

Якщо ви дійсно хочете програмного методу, вам потрібно знайти дірку в якомусь драйвері на цій машині або написати та встановити спрощений драйвер, який викликає KeBugCheckабо KeBugCheckEx.

Веселитися;)

Побічна примітка: це може бути дуже корисно навмисно спричинити аварію для авторів драйверів або навіть при роботі зі шкідливим програмним забезпеченням. Якщо ви налаштували свою систему для створення повної пам’яті пам’яті, ви отримаєте зображення запущеної системи, яке можна буде додатково проаналізувати. Розгляньте такі випадки, як тупик, де налагоджувач не обов'язково допомагає у всіх випадках.


4
Це правда? Це здорово, якщо так! (Ні, я не в настрої тестувати його на будь-якому моєму комп’ютері.)
Андреас Рейбранд

3
Так, насправді це не означає жарт. Це те, що письменники-драйвери користуються певний час, хоча я не пам’ятаю, як би було в реєстрі, зверху голови. Довелося шукати це в своїх замітках.
0xC0000022L

Я зазнав bsod, набравши друкований екран або занадто багато пам'яті, використовуючи Ram або внутрішній жорсткий диск. Можливо, і експлуатування системи теж.
Tech-IO


1

Не точно знаю, як це спричинити, але я вважаю, що у Vista та 7 це за замовчуванням вимкнення при відмові системи та не показ BSOD.


Це добре, я хочу, щоб така поведінка.
Tamás Szelei

1
@FreeAsInBeer: Власне, це тому, що ваші налаштування системи говорять йому перезавантажитися після аварії. Це можна змінити на вкладці «Додатково» властивостей комп'ютера. Крім того, створені нині краплі збитків, як правило, є міні-дампами за замовчуванням, тому перезавантаження відбувається настільки швидко, що не ви побачите синій екран (буквально). Але це там, повірте;)
0xC0000022L

1
@STATUS_ACCESS_DENIED: Я знаю, я просто дав йому знати, що для цієї змінної за замовчуванням встановлено не показ BSOD, тому він знав, щоб перевірити цю властивість, якщо він не отримав її, як очікувалося.
FreeAsInBeer

@FreeAsInBeer: досить справедливо :)
0xC0000022L

1

Як правило, BSOD трапляється, коли щось стає жахливо не так в операційній системі або апаратному забезпеченні. Зробити щось не так у будь-якому з тих, що знаходяться поза ними, по суті, досить складно, оскільки автори операційної системи та постачальники обладнання не оцінюють поганих інженерів програмного забезпечення, тому що їх продукція виглядає погано і руйнує досвід користувачів.

Написання драйвера - один з небагатьох способів наблизитися до операційної системи та обладнання та викликати таку помилку. Звичайно, встановлення такого драйвера - це не те, що ви зазвичай робите без цілеспрямованих знань та адміністративних привілеїв, тому використовувати це для шкідливих цілей виявляється досить складно. Завдяки такому доступу, ви можете зробити набагато більше шкоди без BSOD або подібних проблем.


1

BSOD - це паніка ядра. Це означає частину ядра, саме ядро ​​операційної системи зробило щось по-справжньому погане. Це може бути написана пам'ять, може бути виконаний код, якого він не повинен мати. Програмно, вам потрібно буде отримати код у просторі ядра, а потім якось запустити його на вимогу. Трохи ризиковано для сервера prod.

Звичайні машини Windows мають багато стану в процесах і в ядрі. Незалежно від того, чи потрібно проводити очищення, щоб держава була послідовною, ви просто коротко замикаєтесь.

Зокрема, BSOD - це, як правило, помилка ядра (або драйвера), ядро ​​знаходиться в поганому стані, тому погано відчуває, що не може очиститись і швидше перезавантажиться, втрачаючи будь-який хороший стан у нього, тільки тому, що він не знати, що добре, а що погано. Будь-які буфери не змогли потрапити на диск (и). Тоді він спробує очистити при перезавантаженні, але він втратив багато контексту при відключенні / паніці, тому це буде консервативна очистка, яка повинна перебирати як хороші, так і погані залишки від паніки.

Отже, частина вашої переваги при відключенні відпадає при запуску, оскільки тепер потрібно розібратися, куди він потрапив, ноги зірвали з-під себе. Потрібно запустити chkdsk та очистити будь-які блоки диска, які були в стані часткового запису. USB-диски кешують багато. Ви можете вимкнути кешування, що призведе до меншої ймовірності втрати даних про збій, але тоді не кешування забирає деяку швидкість. Які файли ви готові втратити?

Словом, це погана ідея. Будь-яка виробнича машина, у якої це сталося, може перебувати в нестабільному стані навіть після очищення. Це погано.

Я б сказав просто скористатися натисканням на вимкнення та перезапуск. Ви втратите будь-яку економію часу, яку, на вашу думку, отримаєте вперше, коли вам потрібно буде відновити сервер, оскільки він не завантажиться або ваші програми не можуть запуститися.


Ви пропускаєте суть. Є вагомі причини викликати BSOD на вимогу під час налагодження проблеми з драйвером, про який ви пишете. Однак я вважаю, що це питання ніколи не повинно було мігрувати з SO сюди, через свою природу.
0xC0000022L

@STATUS_ACCESS_DENIED Я погоджуюся з вашим твердженням, але якщо ви пам’ятаєте при первісному запитанні, це не мало нічого спільного з налагодженням, але ярликом для вимкнення системи. На мій погляд, це не вагома причина.
Багата Гомолка

0

Потрібно згадати, що вбивство csrss.exe зробить BSOD. Але не на новіших Windows (8, 8.1).


Це може зробити додаток. Будь-хто може зробити такий додаток у Visual Studio Express (безкоштовно).
пібі

Це код 0xC000021A ( STATUS_SYSTEM_PROCESS_TERMINATED), btw.
0xC0000022L

0

Фрагмент коду з https://www.mpgh.net/forum/showthread.php?t=1100477 працює в Windows 10.17134

#include <windows.h>
#pragma comment(lib, "ntdll.lib")

extern "C" NTSTATUS NTAPI RtlAdjustPrivilege(ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
extern "C" NTSTATUS NTAPI NtRaiseHardError(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);

void BlueScreen()
{
    BOOLEAN bl;
    ULONG Response;
    RtlAdjustPrivilege(19, TRUE, FALSE, &bl); // Enable SeShutdownPrivilege
    NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response); // Shutdown
}

Здається, у Журналі подій немає сліду. Невже, без сумніву, в міні-помпах?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.