微软的又一个大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
...全文
130 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aldz 2001-06-23
  • 打赏
  • 举报
回复
我用别的方法解决了,方法是我在代码中加入了判断驱动盘类型为CD-ROM的驱动器的UNI路径,
由此识别是不是网络盘。
不过,还是谢谢大家的支持!
gameboy999 2001-06-21
  • 打赏
  • 举报
回复
等于没有回答
TechnoFantasy 2001-06-21
  • 打赏
  • 举报
回复
我这里没有用虚拟盘,这里的回答可能对你有帮助:
http://support.microsoft.com/support/kb/articles/Q193/6/23.ASP
TechnoFantasy 2001-06-18
  • 打赏
  • 举报
回复
试试使用FSO中的 folder 对象
aldz 2001-06-18
  • 打赏
  • 举报
回复
我用过了FileSystemObject中的Drive对象,结果也是如此!
我搞不懂folder对象有什么怎么用?它能判断磁盘类型吗?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧