关于读写硬盘的物理扇区的问题---高手请进!!

wangkun007 2003-11-07 11:06:59
hDevice = CreateFile("\\\\.\\C:",GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == NULL)
{
MessageBox (0,"打开驱动器失败!","提示",MB_ICONERROR);
return NULL;
}
SetFilePointer(hDevice,0,NULL,FILE_BEGIN);
if (!ReadFile ( hDevice,buffer,512,&bytesread,NULL) )
{

}

上面是我的主要代码,我想读0柱面0磁头1扇区的512个BYTE,但是我的程序每次都是读0柱面1磁头1扇区的512个BYTE,请问我错在那里了?在这里先谢过了!!!
...全文
44 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jbz 2004-01-25
  • 打赏
  • 举报
回复
mark
qibo999 2003-11-07
  • 打赏
  • 举报
回复
看看这个吧,会有帮助的:
http://www.cppfans.com/articles/system/portrw_winio.asp
solitarywk 2003-11-07
  • 打赏
  • 举报
回复
bool ReadHddParams(unsigned short *params, int pn, int dn)
{
int i,IdePort[2] = {0x1f0, 0x170}; //primary & secondary IDE Controller
unsigned char HD_Selection[2]={0xa0,0xb0}; // Master Disk: 1010 0000, Slave Disk: 1011 0000
unsigned short BasePort = IdePort[pn];
for(i=0;i<500;i++) //Get HDC Status, wait until HDC not busy
{
if((inportb(BasePort+7)&0x80)==0)
break; //hdc is ready
Sleep(1);
}
if(i>=300)return false; //HDC no response

outportb(BasePort+6, HD_Selection[dn]); //master or slave hard disk
outportb(BasePort+7, 0x10); //HDD status
for(i=0;i<300;i++) //Get HDD Status, wait until HDD not busy
{
if((inportb(BasePort+7)&0x80)==0)
break;
Sleep(1);
}
if(i>=300)return false; //HDC no response
if(inportb(BasePort+7)!=0x50)return false; //HDD ready: 0101 0000
outportb(BasePort+6, HD_Selection[dn]); //master or slave hard disk
outportb(BasePort+7, 0xec); //HDD parameters
for(i=0;i<300;i++) //wait for parameters retrieved
{
if(inportb(BasePort+7)==0x58) //retrieved OK
break;
Sleep(1);
}
if(i>=300)return false; //parameters retrieved error
for(i=0;i<256;i++)
params[i]=inportw(BasePort);
return true;
}

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧