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

使用WIN API函数CreateFile和ReadeFile来读取主引导扇区、磁盘分区表、标记等信息,并以hex形式打印。这就是“一切都皆文件”的概念,包括硬盘这些设备,这样使得读取变得非常地容易了。

打印结果如下图:


 

 

读取硬盘的第一扇区数据(MBR+DPT+Signature)_第1张图片


 

 

多年后得第二张图:

 

 


 

 

源码如下:


 

 

/*********************************************************
* FileName: DiskInfo.cpp
* Author  : intret
* Data    : 2009-5-21 12:33 PM
*********************************************************/
 
#include 
#include 
#include 
#include 
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hDevice = CreateFile(_T("////.//PHYSICALDRIVE0"), GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_EXISTING,0,NULL);
 
    if ( hDevice != INVALID_HANDLE_VALUE)
    {
        int count=0;
        unsigned char buffer[512];      //主引导扇区数据(446B+ 64B+ 2B = MBR+DPT+Signature)
        DWORD NumberOfBytesRead;
 
        //读取数据到缓冲区
        BOOL ret = ReadFile(hDevice, buffer, sizeof(buffer), &NumberOfBytesRead, NULL);
        if (ret)
        {
            cout<<"The data of MBR(416), DPT(64) and Signature(2) is:"< 
    
            cout<//大写显示
 
            for (int i=0; i<512; i++)       //前446bytes是MBR
            {
 
                cout<'0')< 
    
                if (((i+1)%16) )
                    cout< 
    
                else
                    cout< 
    
                if (!((i+1)%256))
                    cout< 
    
            }
            cout< 
    
        }
        else
        {
            cout<<"Failed to read data of xx"< 
    
        }
        CloseHandle(hDevice);
    }
    else
    {
        cout<<"打开物理驱动器失败!"< 
    
    }
    return 0;
}

 


 

 

你可能感兴趣的:(buffer,null,file,hex,磁盘,api)