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;
}