[分享] vc++直接读写物理扇区源码,xp下编译通过!

[复制链接]
  • TA的每日心情
    奋斗
    2013-10-21 17:20
  • 签到天数: 13 天

    [LV.3]八品县丞

    15

    主题

    66

    回帖

    224

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    224
    发表于 2012-4-10 17:09:22 | 显示全部楼层 |阅读模式
    #include <stdio.h>
    #include <string.h>
    #include <iostream.h>
    #include <windows.h>

    BOOL ReadPhysicalSector(unsigned long SectorStart, unsigned long SectorCount, unsigned char *p)
    {
            unsigned long BytesPerSector = 512;
        unsigned long nBytes;
        char Drive[] = "\\\\.\\PhysicalDrive0";//注意物理磁盘的大小写,这样才是正确的
        BOOL result = FALSE;
        HANDLE hDeviceHandle = CreateFile(Drive,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,0);
        if(hDeviceHandle)
        {
            long pointer;
            long phigh;
            pointer = SectorStart;
            pointer = pointer*BytesPerSector;
            phigh = pointer>>32;
            SetFilePointer(hDeviceHandle,(unsigned long)pointer,&phigh,FILE_BEGIN);
            if(ReadFile(hDeviceHandle,p,SectorCount*BytesPerSector,&nBytes,NULL))
                result = TRUE;
            CloseHandle(hDeviceHandle);
        }
        return result;
    }
    BOOL WritePhysicalSector(unsigned long SectorStart, unsigned long SectorCount, unsigned char *p)
    {
            unsigned long BytesPerSector = 512;
        unsigned long nBytes;
        char Drive[] = "\\\\.\\PhysicalDrive0";//注意物理磁盘的大小写,这样才是正确的
        BOOL result = FALSE;
        HANDLE hDeviceHandle = CreateFile(Drive,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,0);
        if(hDeviceHandle)
        {
            long pointer;
            long phigh;
            pointer = SectorStart;
            pointer = pointer*BytesPerSector;
            phigh = pointer>>32;
            SetFilePointer(hDeviceHandle,(unsigned long)pointer,&phigh,FILE_BEGIN);
            if(WriteFile(hDeviceHandle,p,SectorCount*BytesPerSector,&nBytes,NULL))
                result = TRUE;
            CloseHandle(hDeviceHandle);
        }
        return result;
    }

    //调用就这样
    int main(int argc, char* argv[])
    {
        unsigned long SectorStart = 0;//比如我要读的是编号为的那个扇区开始的数据,这里写
                                      //如果读的是从第扇区开始后的数据这里就写
        unsigned long SectorCount = 1;//读多少个扇区,这里是个
        unsigned char p[512];//一个扇区数据量是字节呀
        ReadPhysicalSector(SectorStart, SectorCount, p);读第0扇区
        WritePhysicalSector(5,1,p);写到第5扇区
    }
    本帖评分记录金子 收起 理由
    八喜 + 10 神马都是浮云
  • TA的每日心情
    开心
    2015-8-1 07:19
  • 签到天数: 15 天

    [LV.4]七品知县

    2

    主题

    954

    回帖

    1万

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    14100
    发表于 2012-4-10 20:50:46 | 显示全部楼层
    好的.支持下[s:9]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2012-6-24 19:56
  • 签到天数: 2 天

    [LV.1]布衣百姓

    0

    主题

    5

    回帖

    50

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    50
    发表于 2012-5-31 21:17:50 | 显示全部楼层
    [s:9]不错。。。。。。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 3723 天

    [LV.Master]三朝元老

    38

    主题

    6145

    回帖

    2万

    积分

    [INTOHARD]旅长

    Rank: 9Rank: 9Rank: 9

    积分
    21785
    发表于 2012-6-5 16:19:05 | 显示全部楼层
    我真的想学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-3-20 00:12
  • 签到天数: 2303 天

    [LV.Master]三朝元老

    14

    主题

    2808

    回帖

    1万

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    11936
    QQ
    发表于 2012-6-5 18:32:57 | 显示全部楼层
    好贴,绝对要支持下!!~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-10-23 16:36
  • 签到天数: 130 天

    [LV.7]四品道员

    2

    主题

    514

    回帖

    1004

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1004
    发表于 2013-7-9 17:44:44 | 显示全部楼层
    好帖,必须顶起!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-12-12 18:49
  • 签到天数: 1 天

    [LV.1]布衣百姓

    17

    主题

    183

    回帖

    1283

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1283
    发表于 2013-11-27 18:08:12 | 显示全部楼层
    谢谢分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-4-17 10:16
  • 签到天数: 108 天

    [LV.6]五品郎中

    6

    主题

    226

    回帖

    240

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    240
    QQ
    发表于 2014-1-2 21:09:26 | 显示全部楼层
    好东西!值得收藏
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-9-25 14:07
  • 签到天数: 74 天

    [LV.6]五品郎中

    6

    主题

    326

    回帖

    1479

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1479
    发表于 2015-6-15 15:17:08 | 显示全部楼层
    毫不犹豫的收藏了。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表