windows下读取磁盘扇区数据

时间:2021-11-25 21:57:51

在Windows下,磁盘可以看做是一个文件,其文件名为\\\\.\\PhysicalDriveX,其中X表示磁盘的编号,例如\\\\.\\PhysicalDrive0表示的是第0号磁盘,如果需要读取一个磁盘只需要通过对应的文件名称获取到磁盘的句柄,然后通过函数ReadFile读取即可,下面是相关的代码。

//通过给定磁盘的编号,获取到磁盘的句柄
HANDLE GetDiskHandle(int iDiskNo)
{
 char szDriverBuffer[128];
 memset(szDriverBuffer,0,128);
 //格式化设备文件名称
 sprintf_s(szDriverBuffer,"\\\\.\\PhysicalDrive%d",iDiskNo);
 HANDLE m_hDevice = NULL;
 //CreateFile获取到设备句柄
 m_hDevice = CreateFileA(
 szDriverBuffer,// 设备名称,这里指第一块硬盘,多个硬盘的自己修改就好了
 GENERIC_READ, // 指定读访问方式
 FILE_SHARE_READ | FILE_SHARE_WRITE, // 共享模式为读|写,0表示不能共享
 NULL, // NULL表示该句柄不能被子程序继承
 OPEN_EXISTING, // 打开已经存在的文件,文件不存在则函数调用失败
 NULL, // 指定文件属性
 NULL);
 if (m_hDevice==INVALID_HANDLE_VALUE){
 m_hDevice = NULL;
 //无效
 return INVALID_HANDLE_VALUE;
 }
 //设备句柄
 return m_hDevice;
}
 
//通过磁盘的句柄,给定读取的位置,获取到扇区512字节数据返回
//readpos:扇区的逻辑地址
//lpOutBuffer512:用于返回读取的数据
BOOL ReadSectorData( HANDLE& hDevice,UINT64 redpos,__out char * lpOutBuffer512 )
{
 memset(lpOutBuffer512,0,512);
 LARGE_INTEGER li;
 li.QuadPart = redpos*0x200;//0x200 = 512,求出扇区的 字节地址,通过设置读取的地址和长度进行read
 SetFilePointer(hDevice,li.LowPart,&li.HighPart,FILE_BEGIN);
 DWORD DCount=0; //计数
 BOOL bResult=ReadFile(hDevice, lpOutBuffer512,512, &DCount, NULL);
 return bResult;
}
通过上面的操作可以获取到磁盘指定扇区的512字节数据。
windows下读取磁盘扇区数据

windows下读取磁盘扇区数据的更多相关文章

  1. 在Windows下读取Ext4分区

    转自在Windows下读取Ext4分区 本文介绍两个能在 Windows 下读取ext4分区的软件. 第一个是 Ext2Read.它能查看 ext2/3/4 分区并从中拷贝文件和目录,支持 LVM2 ...

  2. Windows下USB磁盘开发系列二:枚举系统中所有USB设备

    上篇 <Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>介绍了很简单的获取系统U盘盘符的办法,现在介绍下如何枚举系统中所有USB设备(不光是U盘). 主要调用的API如下: 1 ...

  3. Windows下USB磁盘开发系列三:枚举系统中U盘、并获取其设备信息

    前面我们介绍了枚举系统中的U盘盘符(见<Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>).以及获取USB设备的信息(见<Windows下USB磁盘开发系列二:枚举系统中 ...

  4. TortoiseGit和msysGit安装及使用笔记(windows下使用上传数据到GitHub)&lbrack;转&rsqb;

    TortoiseGit和msysGit安装及使用笔记(windows下使用上传数据到GitHub) Git-1.7.11-preview+GitExtensions244SetupComplete+T ...

  5. 本文讲述下windows下使用rsync备份数据

    本文讲述下windows下使用rsync备份数据 需要使用的软件如下: 环境需求: 上海monitor上跑有定时任务计划备份线上数据库,现在需要把上海monitor上的备份数据拉回到179.12数据回 ...

  6. windows下读取Linux分区软件

    导读 ext3等日志型文件系统是Linux中被广泛应用的,通常是许多流行Linux发行版默认的文件系统.etx4也是Linux下的日志型文件系统,被设计作为ext3的继任者.他消除了64位存储限制,是 ...

  7. windows下隐藏磁盘分区

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

  8. CentOS7下rsync服务端与Windows下cwRsync客户端实现数据同步配置方法

    最近需求想定期备份服务器d盘的数据到Linux服务器上面,做个笔记顺便写下遇到的问题 以前整过一个win下的cwrsync(客户端)+rsync(服务端:存储)的bat脚本 和整过一个Linux下的r ...

  9. windows下隐藏磁盘分区(转)

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

随机推荐

  1. 用NDK编译lua库

    Android.mk是这样的 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := lua LOCAL_SRC_FILE ...

  2. 2208&colon; &lbrack;Jsoi2010&rsqb;连通数 - BZOJ

    Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...

  3. cocos2dx解析lua table数据结构 简易版&period;

    之前一直用xml填配置, cocos2dx自带了xml解析接口, 非常方便. 但是, 接口好用也改变不了xml的结构字符太多, 书写麻烦, 乱七八糟的事实. 很早就想换lua, 无奈引擎没有现成接口, ...

  4. asp&period;net 连接oracle,报错误&OpenCurlyDoubleQuote;System&period;Data&period;OracleClient 需要 Oracle 客户端软件 8&period;1&period;7 或更高版本

    1.http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 下载对用版本的Instan ...

  5. C&num;调用API函数EnumWindows枚举窗口的方法

    原文 http://blog.csdn.net/dengta_snowwhite/article/details/6067928 与C++不同,C#调用API函数需要引入.dll文件,步骤如下: 1. ...

  6. Python原理 -- 内存管理

    语言的内存管理是语言设计的一个重要方面. 它是决定语言性能的重要因素. 无论是 c语言 的手工管理, 还是 Java 的垃圾回收, 都成为语言最重要的特种. 以下以 python 为例, 说明一门动态 ...

  7. eclipse如何正确部署tomcat7

    eclipse如何正确部署tomcat7 单独运行apache-tomcat-7.0.65(startup.bat)后,在浏览器输入  http://localhost:8080  可以正常出现tom ...

  8. COOKIE和Session的原理及异同

    COOKIE和Session的原理及异同 1. cookie的创建和读取 cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的w ...

  9. abaqus查询网格相关

    怎样查询网格中总共有多少单元和节点: 可以进入mesh模块----tools----query----mesh----下面选择select elements----选中所有单元----鼠标中键就可以显 ...

  10. MySql之查询基础与进阶

     转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8283547.html 一:基本查询 SELECT [DISTINCT] 列1,列2,列3... FROM 表 ...