Шаг 169 - Чтение секторов с диска в Win32

Сектора с диска в Win32 читаются точно так же, как и в DOS "Шаг 21 - Функция абсолютного чтения с диска 25h". Только придется нам использовать DeviceIoControl, читайте "N/A". Итак, вся проблема в том какая функция, вот она:

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 02.12.2001