Windows XP 이상에서 BSOD를 발생시키는 방법은 무엇입니까?


14

프로그래밍 방식으로 Windows XP 및 최신 버전에서 BSOD를 발생시키는 방법이 있습니까? 방법?

BTW는 명확히하기 위해 악의적 인 목적이 아닙니다. 클라이언트는이 방법으로 LAN에서 터미널을 종료 / 재부트 할 수 있도록 요청했습니다. 이유를 물었을 때 정상적인 재부팅보다 빠르기 때문에 ... :)

(이를 슈퍼 유저로 마이그레이션 한 사용자를 이해하지 못하는 사람들이 "프로그래밍 방식으로"사용하는 부분이 궁금합니다.)


18
드라이버 작성과 관련이없는 드라이버를 찾으면 Microsoft에 알리면 문제를 해결할 수 있습니다.
Erik

13
음 어떤 이유로 정상적인 재부팅보다 빠르며 반드시 정상적으로 종료되지는 않습니다. 정말 느리게 종료되는 프로그램이 있으면 중단하는 데 문제가되지 않을 수 있습니다. I / O 하드웨어에 너무 가까운 것을 강제로 종료하거나 포기하면 파일 시스템이 손상 될 수 있습니다. 네트워크 제어 방식으로 전원을 껐다가 다시 켜는 방법과 같습니다. 에 대한 귀하의 문제 ...)

12
당신의 의뢰인은 제도화되고 그의 정신 상태는 의료 팀과 더 밀접한 관계가 있어야합니다.
Darin Dimitrov

9
구급차는 일반적으로 자신의 차를 병원으로 운전하는 것보다 빠릅니다. 그렇다고 선호되는 여행 모드는 아닙니다.
FreeAsInBeer

8
고객에게 전원 버튼을 6 초 동안 길게 누르라고합니다. 또는 전원 코드를 찌르면 더 빠릅니다.
Hans Passant

답변:


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

인쇄 화면을 입력하거나 Ram 또는 내부 Hardisk를 사용할 때 너무 많은 메모리로 인해 bsod가 발생했습니다. 아마도 시스템을 악용 할 수도 있습니다.
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 2

@STATUS_ACCESS_DENIED 나는 당신의 진술에 동의하지만, 원래 질문을 기억한다면 디버깅과는 아무런 관련이 없으며 시스템을 종료하는 지름길과 관련이 있습니다. 제 생각에는 좋은 이유가 아닙니다.
Rich Homolka

0

csrss.exe 프로세스를 종료하면 BSOD가됩니다. 그러나 최신 Windows (8, 8.1)에는 없습니다.


앱으로 수행 할 수 있습니다. 누구나 Visual Studio Express에서 그러한 앱을 만들 수 있습니다 (무료).
pbies

이것은 코드 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
}

이벤트 로그에 추적이없는 것 같습니다. 그래도 미니 덤프에 흔적이 있을까요?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.