微软的又一个大BUG:如何解决GetDriveType的BUG?
aldz 2001-06-18 01:55:00 用GetDriveType来识别驱动器一般来说来带得过,但当系统中有一个经过
先subst重定义后再BCD2加工成的虚拟光驱后,而真正的光驱(包括用VDRIVE
虚拟出的光驱)却变成了网络盘,具体调用GetDriveType的代码如下:
(其实这只是其中一个BUG,还有一个BUG就是它不能识别软驱是三寸还是五寸)
Private Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Sub Form_Load()
Dim nType As Long, S As String, sDrive As String
Dim pos As Integer
S = String(256, Chr(0))
GetLogicalDriveStrings Len(S), S
Do
pos = InStr(S, Chr(0))
sDrive = Left(S, pos - 1)
If Len(sDrive) = 0 Then Exit Do
S = Mid(S, pos + 1)
nType = GetDriveType(sDrive)
List1.AddItem Left(sDrive, 2) & " = " & GetDriveName(nType)
Loop Until pos <= 0
End Sub
Function GetDriveName(ByVal nType As Long)
Select Case nType
Case 1
GetDriveName = "目录不存在"
Case DRIVE_REMOVABLE
GetDriveName = "抽取式磁盘"
Case DRIVE_FIXED
GetDriveName = "硬盘"
Case DRIVE_REMOTE
GetDriveName = "远程(网络)储存装置"
Case DRIVE_CDROM
GetDriveName = "光盘驱动器"
Case DRIVE_RAMDISK
GetDriveName = "RAM Disk"
Case Else
GetDriveName = "无从判断"
End Select
End Function