14

Есть ли способ программно вызвать BSOD в Windows XP и более новых версиях? Как?

Кстати, чтобы уточнить, это не для злонамеренных целей. Клиент запросил возможность отключить / перезагрузить терминал в своей локальной сети таким образом. Когда я спросил почему, они ответили, потому что это быстрее, чем обычная перезагрузка ... :)

(Мне любопытно, какую часть "программно" делают те люди, которые не понимают, кто перенес это в Super User. Duh.)

7 ответов7

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 .

Повеселись ;)

Примечание: может быть очень полезно намеренно вызывать сбой, подобный этому, для разработчиков драйверов или даже при работе с вредоносными программами. Если вы сконфигурировали свою систему для создания полного дампа памяти, у вас будет образ работающей системы, который можно будет дополнительно проанализировать. Рассмотрим такие случаи, как тупиковая ситуация, когда отладчик не всегда помогает во всех случаях.

1

Не уверен, как именно это вызывать, но я верю в Vista и 7, по умолчанию он отключается при сбое системы и не показывает BSOD.

1

Как правило, BSOD происходит, когда что-то идет не так в операционной системе или оборудовании. По своей сути, заставить что-то пойти не так, как внутри, так и вне их, довольно сложно, поскольку как авторы операционных систем, так и производители оборудования не ценят плохих инженеров-программистов, которые делают свои продукты плохими и портят опыт своих пользователей.

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

1

BSOD - это паника ядра. Это означает, что часть ядра, само ядро операционной системы сделали что-то очень плохое. Это может быть исписанная память, может быть выполнен код, которого не должно быть. Программно вам нужно получить код в пространстве ядра, а затем каким-то образом вызвать его по требованию. Немного рискованно для прод-сервера.

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

В частности, BSOD - это (обычно) ошибка ядра (или драйвера), ядро находится в плохом состоянии, поэтому плохо, что оно не может очиститься и скорее перезагрузится, потеряв любое хорошее состояние, которое у него есть, только потому, что оно не знать, что хорошо, а что плохо. Любые буферы не могут быть сброшены на диск (и). Затем он попытается очистить при перезагрузке, но он потерял много контекста при выключении / панике, так что это будет консервативная очистка, из которой придется выбирать как хорошие, так и плохие остатки от паники.

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

Короче, это плохая идея. Любая производственная машина, которая имеет это, может быть в нестабильном состоянии даже после очистки. Это плохо.

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

0

Должен отметить, что процесс убийства csrss.exe сделает BSOD. Но не на самой новой Windows (8, 8.1).

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
}

Кажется, что нет никаких следов в журнале событий. Там наверняка будет след в минидампе, хотя?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .