發現之旅(1):VB最簡單的磁盤直讀的代碼
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.anti-gravitydesign.com
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|