C++读取磁盘扇区

这篇博客展示了如何使用C++从硬盘读取扇区。通过创建文件句柄并设置文件指针,然后调用ReadFile函数读取指定数量的扇区数据,并将结果保存到缓冲区。


#include<windows.h>
#include<iostream.h>
#define headPerCylinder 1023
#define sectorPerhead 63

char * ReadSectors(int cylinder,int head,int sector,int numsec);
char * ReadSectors(int logicalSector,int numsec);

void main()
{
 //char *text=ReadSectors(0,0,1,1);//ReadSectors(cylinder,head,sector,numberOfSectors)
 char *text=ReadSectors(0,1);
 HANDLE filehandle = CreateFile("001",
                         GENERIC_WRITE,
                         FILE_SHARE_WRITE,
                         NULL,
                         OPEN_ALWAYS,
                         FILE_ATTRIBUTE_NORMAL,
                         NULL);
 DWORD byteswrite;
 WriteFile(filehandle,
   text,
   512*1,
   &byteswrite,
   NULL);

 //cout<<text<<endl;
}

char * ReadSectors(int cylinder,int head,int sector,int numsec)
{
 int logicalSector=cylinder*headPerCylinder*sectorPerhead
      +head*sectorPerhead
      +(sector-1);

char *buffer=(char*)malloc(512*numsec);
strset(buffer,' ');
//strset功能: 将一个串中的所有字符都设为指定字符
DWORD bytesread;
char devName[] = "////.//PHYSICALDRIVE0";
HANDLE hDevice = CreateFile(devName,
                         GENERIC_READ,
                         FILE_SHARE_READ,
                         NULL,
                         OPEN_EXISTING,
                         NULL,
                         NULL);
if (hDevice == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Error open disk!","Error",MB_OK);
return NULL;
}
SetFilePointer(hDevice,(logicalSector*512),NULL,FILE_BEGIN);
//if(
   ReadFile(hDevice,
   buffer,
   512*numsec,
   &bytesread,
   NULL);
/*
  )
{
 int err;
 char error[10];
 err=GetLastError();
 itoa(err,error,10);
 //功能: 把一整数转换为字符串
    //用法: char *itoa(int value, char *string, int radix)
 MessageBox(NULL,error,"Reading sectors fail!",MB_OK);
 return NULL;
}
*/
CloseHandle(hDevice);
return buffer;
}

char * ReadSectors(int logicalSector,int numsec)
{
char *buffer=(char*)malloc(512*numsec);
strset(buffer,' ');
//strset功能: 将一个串中的所有字符都设为指定字符
DWORD bytesread;
char devName[] = "////.//PHYSICALDRIVE0";
HANDLE hDevice = CreateFile(devName,
                         GENERIC_READ,
                         FILE_SHARE_READ,
                         NULL,
                         OPEN_EXISTING,
                         NULL,
                         NULL);
if (hDevice == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"Error open disk!","Error",MB_OK);
return NULL;
}
SetFilePointer(hDevice,(logicalSector*512),NULL,FILE_BEGIN);
//if(
   ReadFile(hDevice,
   buffer,
   512*numsec,
   &bytesread,
   NULL);
/*
  )
{
 int err;
 char error[10];
 err=GetLastError();
 itoa(err,error,10);
 //功能: 把一整数转换为字符串
    //用法: char *itoa(int value, char *string, int radix)
 MessageBox(NULL,error,"Reading sectors fail!",MB_OK);
 return NULL;
}
*/
CloseHandle(hDevice);
return buffer;
}

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值