Vyvolanie modrej obrazovky BSOD
 

 

Popíšem peknú funkciu na vyvolanie kolabsu systému s BSOD výnimkou.

Pri tejto metóde budeme využívať undocoment funkcie ukryté v knižnici ntdll.lib, a to:


extern "C" 
{ 
      NTSTATUS _stdcall NtRaiseHardError(::NTSTATUS,::ULONG,::ULONG OPTIONAL,::PULONG_PTR,::ULONG,::PULONG);
      NTSTATUS _stdcall RtlAdjustPrivilege(::ULONG,::BOOLEAN,::BOOLEAN,::PBOOLEAN);
}


Metódu RtlAdjustPrivilegesme použili pri mastaveniu procesu na critical, avšak, u nej sme použili hodnotu privilégií 20.
Pri vyvolani BSOD budeme používať hodnotu privilégii 19:


::RtlAdjustPrivilege(19,TRUE,FALSE,&status);


Ako druhú použijeme metódu NtRaiseHardError:


::ULONG ubret;
::NTSTATUS status;
status = ::NtRaiseHardError(STATUS_FLOAT_MULTIPLE_FAULTS, 0, 0, 0, 6, &ubret);

 

 

-----------------------------------------------------------------

Celá funkcia vrátane ntdll.lib je zakonpovaná do headeru WinAPI.h WinAPI.h



Príklad použitia z main:


#include "Convert.h" //https://www.netbot.sk/sk/14-blog-headers/84-convert-h
#include "WinApi.h"  //https://www.netbot.sk/sk/14-blog-headers/31-winapi
using namespace std;
int main() { ::Diall_WinApi::WinApi::GetInstance()->CallBSODError(); return 0; }