python读写磁盘扇区数据有什么用_技术分享 - 编程实现对硬盘全盘数据进行读写数据擦除...

背景

在 XP 系统下下,我们可以直接调用 WirteFile 函数对磁盘写入数据,但到了 Windows 7 以及 Windows 7 版本以上的系统,就已经开始变得不那么简单了。

在 Windows 7 及以上版本中,对文件系统和存储堆栈进行的更改,限制对磁盘和卷的直接访问,但是,在以下情况,存储驱动器可以写入磁盘句柄:

正要写入的扇区不位于卷内(空隙块与分区表)。注意:程序使用卷之外的扇区来存储元数据。分区表也位于卷之外的扇区中。由于这些扇区不受任何文件系统的控制,因此没有理由阻止对这些扇区的访问

已经通过锁定请求或卸载请求显式锁定卷

正要写入的扇区位于未安装或者无文件系统的卷内(这个是原生磁盘块,没有受操作系统的管理,当然可以随便写)

本文介绍的是使用第 2 种方法,通过锁定请求或卸载请求显式锁定卷来实现对磁盘数据的读写。现在把实现过程的实现原理整理成文档,分享给大家。

实现原理

我们对于磁盘空隙块与分区表等磁盘位置是可以像 XP 系统那样直接使用 WriteFile 函数写的,但对于盘的数据区的写入则应该采用显式锁定的已安装卷或卸载请求显式锁定卷。

一般是采用 FSCTL_DISMOUNT_VOLUME,FSCTL_LOCK_VOLUME 的前提是没有程序占用该盘的文件,所以可能会失败,FSCTL_DISMOUNT_VOLUME 是强制型的,当我们强制卸载请求显式锁定卷后,一些正在占用磁盘的程序会出现崩溃,原因是它不能读盘上资源。但是,要注意的是,对于FSCTL_DISMOUNT_VOLUME, 如果指定的卷是系统卷或包含页面文件,则操作失败,所以不能对系统盘强制卸载成功。

首先,我们先介绍第一种方式:锁定请求显式锁定卷。

首先,我们使用 CreateFile 打开逻辑卷,获取句柄

然后,我们就可以使用 DeviceIoControl 传递 FSCTL_LOCK_VOLUME 控制码,锁定请求显式锁定卷

那么,这时,我们就可以通过 SetFilePointer 一定文件指针,使用 WriteFile 函数对磁盘数据进行写入

写入完成后,还需使用 DeviceIoControl 传递 FSCTL_UNLOCK_VOLUME 控制码,解锁请求显式锁定卷

最后,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值