读写U盘扇区
最近有个朋友想读写U盘扇区的内容,让我帮忙,本来以为挺简单的一件事情,用SetFilePointer API 函数来定位,在用ReadFile WriteFile 直接进行操作就可以了,在网上google了一下代码一大堆,拿过来直接用,的确好用,但是是在XP 环境下,到VISTA,windows 7环境下,即使用管理员权限来进行操作也不好用了,经过查资料才知道,自从VISTA以后对硬盘的读写都进行了保护,在也不能像XP 下那样直接读写了,被逼无奈,自己做了个小小的驱动,经过多次蓝屏,最后算是调稳定了,共享出来,如果能帮的到大家,也算没有白辛苦,同时写出来,也算对自己的一个总结。
本程序的基本思路是:
1.通过磁盘名字获得磁盘驱动的指针。
2.根据磁盘驱动的指针枚举此驱动的所有设备指针。
3.根据枚举出来的各个参数来进行比较是否是自己所要找的设备。
4.找到自己进行操作的设备,保存设备指针,以便后面进行操作。
5.因为此处操作的是U盘,U盘的ID 在进行拔插的时候ID 会变化。还有一个系统中存在多个U盘的可能性,所以在此处用了通过盘符获得U盘的硬盘的ID 逻辑号,把这个号传道驱动中进行区分是否是我们所要进行操作的设备。
要是高手的话,有了基本思路,难度就不大了,可以直接飘过
下面简单的写下过程:
1.找个简单的NT 式驱动来改,先设置驱动的派遣函数,创建驱动设备。(这里我是根据张帆的书上的helloddk来改的 驱动的基本知识)
2.通过内核函数 ObReferenceObjectByName 根据驱动的名字获得设备的对象指针,然后根据设备指针来得到来进行遍历来找到我们需要操作的设备,这里我们操作的是U盘 应从设备 的 DeviceType== FILE_DEVICE_DISK && (Flags &DO_DEVICE_HAS_NAME)&&(Characteristics&FILE_REMOVABLE_MEDIA 几方面来进行考虑 一是 磁盘设备类型 标志位是有名字的 是可移除的设备类型,找到我们想要进行操作的设备。代码如下:
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
