--------------------------------------------------------------
这是我在CSDN上弄的东西,但是看不懂啊 !希望大虾们多多指教

解决方案 »

  1.   

    第一篇中讲到怎样读取物理硬盘的BootRecord的数据,用了如下的方法:Public Const GENERIC_READ = &H80000000
    Public Const GENERIC_WRITE = &H40000000
    Public Const FILE_SHARE_READ = &H1
    Public Const FILE_SHARE_WRITE = &H2
    Public Const OPEN_EXISTING = 3'//为了简单起见,注意下面的声明语句部分地方已经改动过
    Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
        (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal 
    dwShareMode As Long, _
        lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, _
        ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As 
    Long
    Public Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, 
    lpBuffer As Any, _
        ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, 
    lpOverlapped As Long) As Long
    Public Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, 
    lpBuffer As Any, _
        ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, 
    lpOverlapped As Long) As Long
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) 
    As LongDim Buffer(1 To 512) As Byte
    Dim hDevice As Long
    Dim hadRead As Long
    hDevice = CreateFile("\\.\PHYSICALDRIVE0", GENERIC_READ Or GENERIC_WRITE, _
        FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0&, 0&)Call ReadFile(hDevice, Buffer(1), 512, hadRead, ByVal 0&) '//(****)Dim i As Long
    For i = 1 To 512
        Debug.Print Hex$(Buffer(i));
    NextCall CloseHandle(hDevice)这样数组buffer()里的512Byte的数据即为第一个物理硬盘的BootRecord数据了。我们
    可以将它保存在另外一个文件里,这样当万一我们的硬盘受到病毒的破坏导致分区不见
    了,就可以从这个文件恢复BootRecord,从而修复硬盘。啊,那么怎样写数据入BootRecord呢?
    MSDN里没有怎么讲,凭着我不入地狱谁入地狱的精神,我试过用WriteFile API函数就
    可以了,
    首先看看怎样在瞬间“清空”硬盘的BootRecord。将上面带 (****) 号的一句换成:'//注意!千万不要调试/运行本段程序,除非你不想要你的硬盘了(在别人的机上除外
    哦 :)))
    Call WriteFile(hDevice,Buffer(1),512,hadRead,Byval 0&)由于Buffer()里面的数据都是00000……,这样,机器上的第一个物理硬盘的
    BootRecord数据全部变成0…000了,换句话说,MBR和主分区表DPT都被破坏了。如果想
    破坏硬盘上的所有数据,那也是很简单的事,只要不断地 WriteFile,用0000填充硬盘
    上的所有数据就可以了,这样硬盘上的其他部分(DBR、FAT、DIR、DATA)都会被清
    空。(哎呀,怎么越讲越离题了!都教人搞破坏去了,该批斗!)言归正传了,如果首先在Buffer()存有原来硬盘的BootRecord数据,再调用WriteFile
    ,那么就是变成恢复硬盘的BootRecord了,(要是少了这一步,那真是一失足成千古恨
    )。
      

  2.   

    把"\\.\PHYSICALDRIVE" 改为"\\.\smartvsd"试试。不过参数部分也得重新改了