C++讀取磁碟扇區

來源:互聯網
上載者:User

#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;
}

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.