прямой доступ к HDD

Я хочу распечатать загрузочный сектор, используя код ниже, но есть ошибка.

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <math.h>using namespace std;
short ReadSect
(const char * _dsk,    // disk to access
char *&_buff,         // buffer where sector will be stored
unsigned int _nsect   // sector number, starting with 0
)
{
DWORD dwRead;
HANDLE
hDisk=CreateFile(_dsk,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
if(hDisk==INVALID_HANDLE_VALUE) // this may happen if another program is
already reading from disk
{
CloseHandle(hDisk);
return 1;
}
SetFilePointer(hDisk,_nsect*512,0,FILE_BEGIN); // which sector to read

ReadFile(hDisk,_buff,512,&dwRead,0);  // read sector
CloseHandle(hDisk);
return 0;
}

int main()
{
char * drv="\\\\.\\C:";
char *dsk=" \\\\.\\PhysicalDrive0";
int sector=0;
int b = 1;

char *buff=new char[512];
ReadSect(dsk,buff,sector);
if((unsigned char)buff[510]==0x55 && (unsigned char)buff[511]==0xaa) cout
<<"Disk is bootable!"<<endl;
else printf("%02hhX\n",(unsigned int)(unsigned char)buff[511]);

printf("\n");
while (b<513)
{
if (b%16==0)
printf(" %02hhX\n",(unsigned int)(unsigned char)buff[b-1]);

else
printf (" %02hhX ",(unsigned int)(unsigned char)buff[b-1]);
b++;
}
getchar();
}

Вместо того, чтобы печатать шестнадцатеричные цифры загрузочных секторов, Microsoft Visual Studio печатает поток «компакт-дисков». В чем ошибка и как исправить проблему? Кто-нибудь может помочь?

Фото выхода

0

Решение

Прежде всего, запустите его от имени администратора

удалить пространство из

char *dsk=" \\\\.\\PhysicalDrive0";

должно быть

char *dsk="\\\\.\\PhysicalDrive0";

И, если вы используете char * dsk, внесите изменения в:

hDisk = CreateFile (_dsk, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0,0);

должно быть:
CreateFileA (……)

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <math.h>using namespace std;
short ReadSect
(const char * _dsk,    // disk to access
char *&_buff,         // buffer where sector will be stored
unsigned int _nsect   // sector number, starting with 0
)
{
DWORD dwRead;
HANDLE
hDisk = CreateFileA( _dsk, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
//CreateFile()
if (hDisk == INVALID_HANDLE_VALUE) // this may happen if another program is already reading from disk
{
CloseHandle(hDisk);
return 1;
}
SetFilePointer(hDisk, _nsect * 512, 0, FILE_BEGIN); // which sector to read

ReadFile(hDisk, _buff, 512, &dwRead, 0);  // read sector
CloseHandle(hDisk);
return 0;
}

int main()
{
char * drv = "\\\\.\\C:";
char *dsk = "\\\\.\\PhysicalDrive0";
int sector = 0;
int b = 1;

char *buff = new char[512];
ReadSect(dsk, buff, sector);
if ((unsigned char)buff[510] == 0x55 && (unsigned char)buff[511] == 0xaa) cout
<< "Disk is bootable!" << endl;
else printf("%02hhX\n", (unsigned int)(unsigned char)buff[511]);

printf("\n");
while (b<513)
{
if (b % 16 == 0)
printf(" %02hhX\n", (unsigned int)(unsigned char)buff[b - 1]);

else
printf(" %02hhX ", (unsigned int)(unsigned char)buff[b - 1]);
b++;
}
getchar();
}

фото выхода

WinAPI Unicode и функции ANSI

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]