'VB 6.0 版 'THcO*<
'这不是我写的,它更强悍了。因为可以直接读写物理扇区(CHS),而不是逻辑扇区。 &
*^FBJEa.
IZ$7'Mo86
Private 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 V-y"@0%1
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long ;{n@hM*O
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long '//declare has changed
Br}&
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long '//declare has changed >y2;sJ4]D%
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long Vr1Wr%
'如果用绝对扇区写,那么文件的建立打开都不能用VB的 open 语句了。 qfO=_z ES
COE,pb17
GwOn&EpY!
Private Const GENERIC_READ = &H80000000 PY4RwN
Private Const GENERIC_WRITE = &H40000000 %TY;}V59 b
X>[x7t:
Private Const FILE_SHARE_READ = &H1 2 kOFyD
Private Const FILE_SHARE_WRITE = &H2 fkprTk^#
Private Const OPEN_EXISTING = 3 r((2.,\Z
n~1'M/wh
Private Const INVALID_HANDLE_VALUE = -1 _h%
:Tu
+0w~Skd,
'//file seek
wknr^A
Private Const FILE_BEGIN = 0 !b
esMZ
Private Const FILE_CURRENT = 1 14[+PoF^A
Private Const FILE_END = 2 NF}QQwG3
YWV"I|Z
Private Const ERROR_SUCCESS = 0& 6 9 PTo
P9Gjsu #
'//device io control 7j>NUx=j3
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long *H"IW0I
yj^LX2x"
Private Const IOCTL_DISK_GET_DRIVE_GEOMETRY As Long = &H70000 '458752 y^rcUPLT
Private Const IOCTL_STORAGE_GET_MEDIA_TYPES_EX As Long = &H2D0C04 @}
nI$x.
Private Const IOCTL_DISK_FORMAT_TRACKS As Long = &H7C018 KtT.WHr(m
Private Const FSCTL_LOCK_VOLUME As Long = &H90018 ~*3obZ2>2
Private Const FSCTL_UNLOCK_VOLUME As Long = &H9001C S~dD ;R
Private Const FSCTL_DISMOUNT_VOLUME As Long = &H90020 }~?B>vZS
Private Const FSCTL_GET_VOLUME_BITMAP = &H9006F J3]!<v=
~wMdk9RQ
'//type x>>#<hOz[
Private Type LARGE_INTEGER ]x8_f6;D
lowpart As Long *4i)aj
highpart As Long F
S3MR9
End Type Quc,,#u
A`=;yD
Private Enum MEDIA_TYPE I9! eL4e
Unknown uCc
.dluU
F5_1Pt2_512 )HrFWI'Y
F3_1Pt44_512 c+6/@y
F3_2Pt88_512 Q}KNtNCpx
F3_20Pt8_512 CQf<En|1
F3_720_512 E%eTjvvxus
F5_360_512 Dq#/Uw#
F5_320_512 tQSj[Yl
F5_320_1024 m;=wQYFr{I
F5_180_512 .6,+q2tyk,
F5_160_512 Xq3n7d.
RemovableMedia IL:d`Kbqf
FixedMedia dLtSa\2Hn
End Enum ,0'Yj?U>
b`NXe7A
Private Type DISK_GEOMETRY 4"OUmh9LHB
Cylinders As LARGE_INTEGER hX-([o
MediaType As MEDIA_TYPE +
d[A'&"
TracksPerCylinder As Long DCJmk6p%0
SectorsPerTrack As Long y_^w|
BytesPerSector As Long bv.DW,l%'
End Type 7eQE[C
HF9\SVR
B
'//private vars ugtzF
Private hDisk As Long 'disk handle Oz\mIVC#
Private lpGeometry As DISK_GEOMETRY 'disk info KGMX >t'
Private lBufferSize As Long 'the buffer size of read/write 6sRe. ct<