#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#pragma pack(push, 1)
typedef struct PART
{
BYTE ActFlag;
BYTE Begin_Hd;
WORD Begin_SecTrk;
BYTE SysCode;
BYTE End_Hd;
WORD End_SecTrk;
DWORD RelSec;
DWORD Size;
};
typedef struct MBR
{
BYTE LoadCode[0x1BE];
struct PART rt[4];
WORD EndFlag;
};
#pragma pack(pop)
int main(void)
{
HANDLE hDrive = CreateFile(L"\\\\.\\PhysicalDrive1",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (INVALID_HANDLE_VALUE == hDrive)
fprintf(stderr, "CreateFile failed 0x%08X\n", GetLastError());
else
{
struct MBR mbr;
DWORD NumberOfBytesRead = 0;
RtlZeroMemory(&mbr, sizeof(mbr));
if (0 == ReadFile(hDrive, &mbr, sizeof(mbr), &NumberOfBytesRead, 0))
fprintf(stderr, "ReadFile failed 0x%08X\n", GetLastError());
else if (sizeof(mbr) != NumberOfBytesRead)
fprintf(stderr, "sizeof(mbr) = 0x%08X, ReadFile read 0x%08X\n",
sizeof(mbr), NumberOfBytesRead);
else
{
int j;
for (j = 0; j < 4; j++)
fprintf(stdout, "Partition %d\n"
" ActFlag = 0x%02X\n"
" Begin_Hd = 0x%02X\n"
" Begin_SecTrk = 0x%04X\n"
" SysCode = 0x%02X\n"
" End_Hd = 0x%02X\n"
" End_SecTrk = 0x%04X\n"
" RelSec = 0x%08X\n"
" Size = 0x%08X\n\n",
j,
mbr.rt[j].ActFlag,
mbr.rt[j].Begin_Hd,
mbr.rt[j].Begin_SecTrk,
mbr.rt[j].SysCode,
mbr.rt[j].End_Hd,
mbr.rt[j].End_SecTrk,
mbr.rt[j].RelSec,
mbr.rt[j].Size);
}
CloseHandle(hDrive);
}
system("pause");
return 0;
}
#include "stdafx.h"
#include <windows.h>
int main(int argc, char* argv[])
{
HANDLE hDevice;
DWORD lpBytesReturned;
hDevice = CreateFile(L"\\\\.\\PhysicalDrive1", // это мой флэш накопитель
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
0,
0);
if (INVALID_HANDLE_VALUE == hDevice)
{
char buf[64];
CharToOem(L"Флешка не вставлена\n", buf);
printf(buf);
}
if (DeviceIoControl(hDevice,
FSCTL_LOCK_VOLUME,
NULL, 0,
NULL, 0,
&lpBytesReturned,
NULL))
{
char buf[64];
CharToOem(L"Диск заблокирован\n", buf);
printf(buf);
}
system("pause");
}
DeviceIoControl(hDevice, IOCTL_DISK_UPDATE_PROPERTIES,
NULL,0,NULL,0,&lpBytesReturned,NULL);
...
int main(void)
{
HANDLE hDrive = CreateFile(L"\\\\.\\PhysicalDrive1",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (INVALID_HANDLE_VALUE == hDrive)
fprintf(stderr, "CreateFile failed 0x%08X\n", GetLastError());
else
{
struct MBR mbr;
DWORD NumberOfBytesRead = 0;
RtlZeroMemory(&mbr, sizeof(mbr));
ReadFile(hDrive, &mbr, sizeof(mbr), &NumberOfBytesRead, 0);
printf("Partition %d\n SysCode = 0x%02X\n",1,mbr.rt[1].SysCode);
switch(mbr.rt[1].SysCode)
{
case 6: mbr.rt[1].SysCode=22; break; //FAT16 скрываем
case 22: mbr.rt[1].SysCode=6; break; //FAT16 открываем
case 11: mbr.rt[1].SysCode=27; break;//FAT32 скрываем
case 27: mbr.rt[1].SysCode=11; break;//FAT32 открываем
default:break;
}
WriteFile(hDrive, &mbr, sizeof(mbr), &NumberOfBytesRead, 0);
CloseHandle(hDrive);
}
system("pause");
return 0;
}
Состояние: Консультация активна (до закрытия: 1 сут. 00 час. 06 мин.)
int main(void)
{
HANDLE hDrive = CreateFile(L"\\\\.\\PhysicalDrive1",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (INVALID_HANDLE_VALUE == hDrive)
fprintf(stderr, "CreateFile failed 0x%08X\n", GetLastError());
else
{
struct MBR mbr;
DWORD NumberOfBytesRead = 0;
RtlZeroMemory(&mbr, sizeof(mbr));
ReadSector(....);
printf("Partition %d\n SysCode = 0x%02X\n",1,mbr.rt[1].SysCode);
switch(mbr.rt[1].SysCode)
{
case 6: mbr.rt[1].SysCode=22; break; //FAT16 скрываем
case 22: mbr.rt[1].SysCode=6; break; //FAT16 открываем
case 11: mbr.rt[1].SysCode=27; break;//FAT32 скрываем
case 27: mbr.rt[1].SysCode=11; break;//FAT32 открываем
default:break;
}
WriteSector(....);
CloseHandle(hDrive);
}
system("pause");
return 0;
}
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
HANDLE hD;
#pragma pack(push, 1)
struct PART
{
BYTE ActFlag;
BYTE Begin_Hd;
WORD Begin_SecTrk;
BYTE SysCode;
BYTE End_Hd;
WORD End_SecTrk;
DWORD RelSec;
DWORD Size;
};
struct MBR
{
BYTE LoadCode[0x1BE];
struct PART rt[4];
WORD EndFlag;
};
#pragma pack(pop)
bool ReadSector (DWORD sector, MBR *mbr, int sectorSize)
{
DWORD read = 0;
if (SetFilePointer(hD, sector, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
return false;
if (!ReadFile(hD, mbr, sectorSize, &read, NULL))
return false;
return true;
}
bool WriteSector(DWORD sector, MBR *mbr, int sectorSize)
{
DWORD wrote = 0;
LARGE_INTEGER position = {0};
if (!SetFilePointerEx(hD, position, 0, FILE_BEGIN))
{
return false;
}
if (!WriteFile(hD, mbr, sectorSize, &wrote, NULL))
return false;
return true;
}
int main(void)
{
hD = CreateFile(L"\\\\.\\PhysicalDrive1",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (INVALID_HANDLE_VALUE == hD)
fprintf(stderr, "CreateFile failed 0x%08X\n", GetLastError());
else
{
struct MBR mbr;
DWORD NumberOfBytesRead = 0;
RtlZeroMemory(&mbr, sizeof(mbr));
ReadSector(0,&mbr,512);
printf("Partition %d\n SysCode = 0x%02X\n",1,mbr.rt[1].SysCode);
switch(mbr.rt[1].SysCode)
{
case 6: mbr.rt[1].SysCode=22; break; //FAT16 скрываем
case 22: mbr.rt[1].SysCode=6; break; //FAT16 открываем
case 11: mbr.rt[1].SysCode=27; break;//FAT32 скрываем
case 27: mbr.rt[1].SysCode=11; break;//FAT32 открываем
default:break;
}
WriteSector(0,&mbr,512);
CloseHandle(hD);
}
system("pause");
return 0;
}
model tiny
xorData equ 10h
.code
org 100h
begin:
;читаем сектор
mov ax,0201h
call RWSector
;читаем SysCode и анализипуем его
mov al,SysCode
cmp al,06h;06
jz isJob
cmp al,16h;22
jz isJob
cmp al,0Bh;11
jz isJob
cmp al,1Bh;27
jnz isSkeep
;меняем переключаем значение скрытый
isJob: xor al,xorData
;записываем SysCode
isSkeep: mov SysCode,al
;пишем сектор
mov ax,0301h
call RWSector
;возврат в ОС
ret
;подпрограмма чтения-записи сектора
RWSector: mov cx,0001h
mov dx,0000h;младший байт определяет дисковод
lea bx,dbBuffer
int 13h
ret
;буфер обмена
dbBuffer db 446 dup(?);
;первое поле описания диска
db 16 dup(?);mbr.rt[0]
;поле описания диска mbr.rt[1]
db ?;ActFlag
db ?;Begin_Hd
dw ?;Begin_SecTrk
SysCode db ?;
db ?;End_Hd
dw ?;End_SecTrk
dd ?;RelSec
dd ?;Size
;остальные поля описания mbr.rt[2 & 3]
db 2*16 dup(?)
;сигнатура
db ?,?;
end begin
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.