大家知道用CreateFile可以实现WINDOWS下对硬盘扇区的直接读写。但现在我要读取硬盘的MBR,也就是硬盘的第一个扇区,那又该怎么办?(比如我们的C盘通常位于硬盘的63扇区,现在要读硬盘的0扇区该怎么办呢?)

解决方案 »

  1.   

    依楼上之见应该怎么做呢?反正不使用VxD或病毒原理进入RING0,在普通的RIN3下怎么实现?
      

  2.   

    经测试,以下代码可行 HANDLE hDrive = CreateFile( _T("\\\\.\\C:"), FILE_ALL_ACCESS,
    FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
    BYTE pBuf[512];
    DWORD dwRead;
    ReadFile( hDrive, pBuf, 512, &dwRead, NULL );
    CloseHandle( hDrive );
      

  3.   

    pBuf里就是MBR的信息,可以看到,最后两个字节是0x55和0xAA
      

  4.   

    HANDLE hDrive = CreateFile( _T("\\\\.\\PHYSICALDRIVE0"), FILE_ALL_ACCESS,
    FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
    BYTE pBuf[512];
    DWORD dwRead;
    ReadFile( hDrive, pBuf, 512, &dwRead, NULL );
    CloseHandle( hDrive );
    应该是这个吧,读MBR(即硬盘第一扇区),lpFileName参数应该是_T("\\\\.\\PHYSICALDRIVE0")
      

  5.   

    to soft_biao:
    你的代码不对,MBR是每个逻辑驱动器都有的,而不是物理磁盘。
      

  6.   

    to fireseed:
    MBR一般位于硬盘的第一扇区,对于单系统而言一般只有一个,而每个逻辑驱动器都有的是DBR:)
      

  7.   

    soft_biao(巴不豆) 的代码可以打开物理硬盘,可以读到 MBR
      

  8.   

    soft_biao(巴不豆) 的正解!!!!这就是我想要的。感谢各位大侠的顶力支持!!结贴。
      

  9.   

    MBR是每个硬盘只有一个,而非每个分区一个的,MRB保存了引导程序和分区信息。同意soft_biao(巴不豆)的代码。