读取硬盘的第一扇区数据(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;
}
相关文章推荐
- 读取硬盘扇区的数据
- 读取硬盘的MBR引导扇区(Windows各系统通用)
- [转]硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等)
- babyos (十) —— 通过IO端口读取硬盘扇区
- FindFirstStore函数 按扇区读取Windows Mobile的数据
- 硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区
- 硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
- windows sdk编程系列文章 --- 直接从硬盘扇区读取文件内容
- 硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等)
- 编程方式读取硬盘信息 - MBR以及各个分区信息
- FindFirstStore函数 按扇区读取Windows Mobile的数据
- 写一个能装载硬盘数据到内存的MBR程序
- Linux 入门记录:六、Linux 硬件相关概念(硬盘、磁盘、磁道、柱面、磁头、扇区、分区、MBR、GPT)
- 已分享过硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
- 硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区[转]
- 六、硬盘全盘MBR转GPT格式化(注意备份全盘重要数据)
- 硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
- 按扇区读取Windows Mobile的数据
- 直接写入硬盘的第一扇区
- (转)硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区,电脑启动过程