写数据到硬盘某个偏移地址位置 ,关机后再开机,系统不能正常启动
.
.
const int BUFSIZE =161*1024;//322*512=164864字节
unsigned char lpWriteBuff[BUFSIZE];//存要写入硬盘(这里是F盘)的数据
.
.
char devName[200];
strcpy(devName,"\\.\PHYSICALDRIVE0");
WriteSectors(devName,322, 238852096, lpWriteBuff);
//322是扇区个数
//笔者想要把lpWriteBuff的内容写到硬盘(这里是F盘)的偏移地址为238852096(逻辑扇区:LBA=238852096字节 )
.
.
BOOL CCRegProgramDlg::WriteSectors( char devName[],LONG redpos, LONG wSectors, unsigned char lpWriteBuff[])
{ //笔者想要把lpWriteBuff的内容写到硬盘(这里是F盘)的偏移地址为238852096(逻辑扇区:LBA=238852096字节 )的位置
//笔者理解:redpos=322:扇区个数,wSectors=238852096:设置写入数据的地址(要写入数据起点的偏移地址)
LARGE_INTEGER li={0};
li.QuadPart=wSectors;//wSectors=25700620;//应该是512的整数倍,(//0x200 = 512)
//通过设置写入的地址
//li.LowPart=redpos*512;
//li.HighPart=1024*redpos*512;//11983574;//158575088;//1024*redpos*512;
CString ss;ss.Format("li.LowPart=%d li.HighPart=%d %d % d",li.LowPart,li.HighPart,redpos,li.QuadPart);AfxMessageBox(ss);
HANDLE hDev=CreateFile(devName,GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(hDev == INVALID_HANDLE_VALUE) return 0;
//SetFilePointer(hDev, 512 * dwStartSector, 0, FILE_BEGIN);//原代码
//SetFilePointer(hDev, li.LowPart, 0, FILE_BEGIN);//该语句结果
SetFilePointer(hDev, li.LowPart, &li.HighPart, FILE_BEGIN);
//DWORD dwCB;//原代码
unsigned long dwCB;
BOOL bRet = WriteFile(hDev, lpWriteBuff, redpos*512, &dwCB, NULL);//li.LowPart
CloseHandle(hDev);
return bRet;
}
//问题是:SetFilePointer(hDev, li.LowPart, &li.HighPart, FILE_BEGIN);语句
//不能把lpWriteBuff[BUFSIZE]的内容写到硬盘(F盘)偏移地址为:238852096的位置
//而是几乎写到C盘的“起始位置”,关机后再开机,系统不能正常启动
//请高手能帮笔者解决这个问题,笔者不是计算机专业,上面用的术语不一定准确
把不能启动的硬盘作为外挂盘,找一个能启动的计算机进去看看,你究竟破坏了什么。