Сектора с диска в 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, ®, sizeof(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. Но есть одно, но Вы видите не всю строку, так как среди прочитанных данных есть символ окончания строки. |