'VB 6.0 版 YCir Oge
'这不是我写的,它更强悍了。因为可以直接读写物理扇区(CHS),而不是逻辑扇区。 @47[vhE
w906aV*s
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 .WBI%ci
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long J'I1,5(
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 N>Vacc_[
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 %~][?Y
><
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long 8f /T!5
'如果用绝对扇区写,那么文件的建立打开都不能用VB的 open 语句了。 : =
]sq}IN
$o/0A
[`y:M&@
Private Const GENERIC_READ = &H80000000 R)sp
Private Const GENERIC_WRITE = &H40000000 'bZMh9|
MMd0O X)P
Private Const FILE_SHARE_READ = &H1 V"w`!
Private Const FILE_SHARE_WRITE = &H2 *?EO n -
Private Const OPEN_EXISTING = 3 Uc_'3|e
aQ32p4C
Private Const INVALID_HANDLE_VALUE = -1 \Oi5=,
$, 8 CH)w
'//file seek XRClBTKF
Private Const FILE_BEGIN = 0 pg}~vb"
Private Const FILE_CURRENT = 1 c-[Q,c
Private Const FILE_END = 2 EC^Ev|PB\u
JRHf.?
Private Const ERROR_SUCCESS = 0& 7(
yXsVq
D?iy.Dg
'//device io control
_8,vk-,'
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 [?Mc4uT{
2N
L:\%wz
Private Const IOCTL_DISK_GET_DRIVE_GEOMETRY As Long = &H70000 '458752 gJ<@;O8zu0
Private Const IOCTL_STORAGE_GET_MEDIA_TYPES_EX As Long = &H2D0C04 *p" "YEN
Private Const IOCTL_DISK_FORMAT_TRACKS As Long = &H7C018 6T R8D\
Private Const FSCTL_LOCK_VOLUME As Long = &H90018 = 4BLc
Private Const FSCTL_UNLOCK_VOLUME As Long = &H9001C Es.toOH$S
Private Const FSCTL_DISMOUNT_VOLUME As Long = &H90020 'LJ %.DJ
Private Const FSCTL_GET_VOLUME_BITMAP = &H9006F 6V.awg,
X_vI0YX9
'//type *37LN
Private Type LARGE_INTEGER Qw3a"k-
lowpart As Long 7JxE|G
highpart As Long V}vl
2o
End Type L@)b%Q@a
d9`3EP)n
Private Enum MEDIA_TYPE +^/Nil
Unknown 3~cS}N T
F5_1Pt2_512 cmwzKu%
F3_1Pt44_512 ,maAw}=
F3_2Pt88_512 4RK.Il*d
F3_20Pt8_512 3g?MEM~
F3_720_512 uAW*5 `[
F5_360_512 >k$[hk*~
F5_320_512
1m&!l6Jk
F5_320_1024 ?l)}E
F5_180_512 DQ}_9?3
F5_160_512 yq/[ /*7^
RemovableMedia dH
^b)G4
FixedMedia r24\DvS
End Enum }9L 40)8
kA7~Yu5|
Private Type DISK_GEOMETRY =fKhXd
Cylinders As LARGE_INTEGER p_rN1W
Dd'
MediaType As MEDIA_TYPE J0IdFFZ|w
TracksPerCylinder As Long ?&whE!
SectorsPerTrack As Long %Nwyx;>9^K
BytesPerSector As Long !L&=?CX
End Type EpFIKV!
o 8~
f
'//private vars t!J";l
Private hDisk As Long 'disk handle D=i0e8D!+
Private lpGeometry As DISK_GEOMETRY 'disk info &