您的位置:首页 > 其它

读取硬盘的第一扇区数据(MBR+DPT+Signature)

2009-11-01 20:51 405 查看
使用WINAPI函数CreateFile和ReadeFile来读取主引导扇区、磁盘分区表、标记等信息,并以hex形式打印。这就是“一切都皆文件”的概念,包括硬盘这些设备,这样使得读取变得非常地容易了。
打印结果如下图:





多年后得第二张图:





源码如下:

/*********************************************************


*FileName:DiskInfo.cpp


*Author:intret


*Data:2009-5-2112:33PM


*********************************************************/




#include<iostream>


#include<iomanip>


#include<tchar.h>


#include<Windows.h>




usingnamespacestd;




int_tmain(intargc,_TCHAR*argv[])


{


HANDLEhDevice=CreateFile(_T("////.//PHYSICALDRIVE0"),GENERIC_READ|GENERIC_WRITE,


FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);




if(hDevice!=INVALID_HANDLE_VALUE)


{


intcount=0;


unsignedcharbuffer[512];//主引导扇区数据(446B+64B+2B=MBR+DPT+Signature)


DWORDNumberOfBytesRead;




//读取数据到缓冲区


BOOLret=ReadFile(hDevice,buffer,sizeof(buffer),&NumberOfBytesRead,NULL);


if(ret)


{


cout<<"ThedataofMBR(416),DPT(64)andSignature(2)is:"<<endl<<endl;


cout<<setiosflags(ios::uppercase);//大写显示




for(inti=0;i<512;i++)//前446bytes是MBR


{




cout<<hex<<setw(2)<<setfill('0')<<buffer[i]+0;


if(((i+1)%16))


cout<<ends;


else


cout<<endl;


if(!((i+1)%256))


cout<<endl;


}


cout<<endl;


}


else


{


cout<<"Failedtoreaddataofxx"<<endl;


}


CloseHandle(hDevice);


}


else


{


cout<<"打开物理驱动器失败!"<<endl;


}


return0;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐