发现之旅(1):VB最简单的磁盘直读的代码

发表于:2007-05-25来源:作者:点击数: 标签:代码最简单直读之旅发现
copyrightguoyong_cy(2006) 精通API的朋友可能都知道CreateFile可以用来打开很多东西,比如说硬盘之类,而且在用它们的时候可能对一大堆函数和参数已经伤透了脑筋。猜想 vb 自带的语句Open也是由createfile编写的,但不知道有多少人想到用open来打开硬盘?!
copy right guoyong_cy (2006)

精通API的朋友可能都知道CreateFile可以用来打开很多东西,比如说硬盘之类,而且在用它们的时候可能对一大堆函数和参数已经伤透了脑筋。猜想vb自带的语句"Open"也是由createfile编写的,但不知道有多少人想到用open 来打开硬盘?!(经过网上查找,没有一句类似的代码)
(以下代码在win2000、Fat16,32文件系统、VisualBasic6.0测试成功,window98肯定不行,其他系统没试过)
因为本人一直都用windows98,最近刚装了个2000,就测试用open来实现逻辑盘直读(光盘和其他东西也可以,不过有时要出问题)。注:其实这里并不是直接访问硬盘(win2000等是不允许应用程序这样做的),还是通过了文件系统,只不过文件和我们通常见到的不同而已。
其中一代码基本如下
dim MyN(511) as byte
Open "\\.\c:" for binary as #1
open "\\.\h:" for binary as #2
  do while not eof(1)'实际上这句在这里没什么用
    get #1,,MyN
    put #2,,MyN
  loop
close
请在以上适当位置加上doevents和控制退出的代码
其中MyN的长度必须是512的倍数,读取起始位置必须是512倍数+1(C语言中就是512倍数)
以上代码实现将c盘的东西直接读出并写到h盘
(本代码将把h盘原来数据清空,请小心测试,责任自负)
对于系统可读取的盘(已经格式化过了的),用open几乎可以做任何操作,甚至在win2000下把系统盘(c:)写掉(请不要用此来搞破坏活动哈)。
如果写入的数据都是0,那么该盘将成为“没格式化的盘”,有点象低格,在这种情况下只要close掉文件,用open将不能再打开,而改用createfile仍然可以操作
用本语句已经实现恢复格式化前盘上的数据、格式化盘(因为只用open没法读取扇区和磁道数,只有自己设定值,而且前提是盘上已经有了FAT)、恢复已删除的文件、删除正在运行的程序文件、光盘直读,相信还可以做其他事,当然做个病毒也可以, 呵呵。有兴趣的朋友可以测试一下看能不能打开其他设备。
本来想用Open做个在win2000下的类似ghost的东西,却发现支持文件长度只有Long,晕,暂时还没想到办法(不过还是用c语言做安全,用这个系统可能要报废)目前在这方面的处理上我倾向于用open,毕竟用createfile太繁了,还要配合一堆函数和参数,实在没办法再考虑它吧!

本主题取名为“发现之旅”,故希望大家把自己发现特别的代码发表出来,互相学习!另外这些文章开头都是VB,只是因为这里人最多,初学者也最多,为了提高大家对编程的兴趣,所以在这里发。用其他语言也很容易实现。
(盘、最简单、直读、Open、\\.\、CreateFile、DeviceIoControl、VB格式化盘)

原文转自:http://www.ltesting.net