Чтение секторов с диска в Win32

Сектора с диска в Win32 читаются точно так же, как и в DOS. Только придется нам использовать DeviceIoControl. Итак, вся проблема в том какая функция, вот она:

#define VWIN32_DIOC_DOS_INT25 2

Аналог функции из DOS. Осталось только настроить регистры и вперед.

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

typedef struct DIOCRegs {
DWORD reg_EBX;
DWORD reg_EDX;
DWORD reg_ECX;
DWORD reg_EAX;
DWORD reg_EDI;
DWORD reg_ESI;
DWORD reg_Flags;
} DIOC_REGISTERS;


#define VWIN32_DIOC_DOS_INT25 2

void main()
{
HANDLE hDevice;
hDevice = CreateFile("\\\\.\\vwin32", 0, 0, NULL,
0,FILE_FLAG_DELETE_ON_CLOSE, NULL);
if (hDevice != INVALID_HANDLE_VALUE)
{
DWORD dw;
BOOL result;

DIOC_REGISTERS reg;

char data[512];

reg.reg_EAX = 3;
reg.reg_ECX = 1;
reg.reg_EDX = 0;
reg.reg_EBX =(unsigned long) &data;
result = DeviceIoControl(hDevice,VWIN32_DIOC_DOS_INT25,
&reg, sizeof(reg),&reg, sizeof(reg), &dw, 0);
if (result != 0)
{
cout << "Ok - " << endl;
cout << data << endl;
}
else
{
cout << GetLastError() << endl;
cout << "Error" << endl;
}
CloseHandle(hDevice);
}
else cout << "Error Open " << endl;
}

И результат смотрим точно такой, как и при использовании TASM. Но есть одно, но Вы видите не всю строку, так как среди прочитанных данных есть символ окончания строки.

 
« Предыдущая статья   Следующая статья »