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

被折叠的 条评论
为什么被折叠?



