|
vbAccelerator - Contents of code file: mDrives.basThis file is part of the download Device Names Sample, which is described in the article Mapping NT Device Names to Drive Letters and vice-versa. Attribute VB_Name = "mDrives" Option Explicit Public Enum EDriveType DRIVE_REMOVABLE = 2 DRIVE_FIXED = 3 DRIVE_REMOTE = 4 DRIVE_CDROM = 5 DRIVE_RAMDISK = 6 End Enum Private Declare Function QueryDosDeviceW Lib "kernel32.dll" ( _ ByVal lpDeviceName As Long, _ ByVal lpTargetPath As Long, _ ByVal ucchMax As Long _ ) As Long Private Declare Function GetLogicalDriveStringsA Lib "kernel32" ( _ ByVal nBufferLength As Long, lpBuffer As Any) As Long Private Declare Function GetDriveTypeA Lib "kernel32" ( _ ByVal nDrive As String) As Long Private Const MAX_PATH = 260 Public Function GetDriveType(ByVal sDrive As String) As EDriveType If Right(sDrive, 1) <> "\" Then sDrive = sDrive & "\" End If GetDriveType = GetDriveTypeA(sDrive) End Function Public Function GetDrives() As Collection Dim colDrives As New Collection Dim lSize As Long Dim lR As Long Dim iLastPos As Long Dim iPos As Long Dim sDrive As String Dim sDriveStrings As String lSize = GetLogicalDriveStringsA(0, ByVal 0&) sDriveStrings = String(lSize + 1, 0) lR = GetLogicalDriveStringsA(lSize, ByVal sDriveStrings) iLastPos = 1 Do iPos = InStr(iLastPos, sDriveStrings, vbNullChar) If Not (iPos = 0) Then sDrive = Mid$(sDriveStrings, iLastPos, iPos - iLastPos) iLastPos = iPos + 1 Else sDrive = Mid$(sDriveStrings, iLastPos) End If If Len(sDrive) > 0 Then colDrives.Add sDrive End If Loop While Not (iPos = 0) Set GetDrives = colDrives End Function Public Function GetDriveForNtDeviceName(ByVal sDeviceName As String) As String Dim sFoundDrive As String Dim colDrives As Collection Dim vDrive As Variant For Each vDrive In GetDrives() If (GetNtDeviceNameForDrive(vDrive) = sDeviceName) Then sFoundDrive = vDrive Exit For End If Next GetDriveForNtDeviceName = sFoundDrive End Function Public Function GetNtDeviceNameForDrive(ByVal sDrive As String) As String Dim bDrive() As Byte Dim bResult() As Byte Dim lR As Long Dim sDeviceName As String If Right(sDrive, 1) = "\" Then If Len(sDrive) > 1 Then sDrive = Left(sDrive, Len(sDrive) - 1) End If End If bDrive = sDrive ReDim Preserve bDrive(0 To UBound(bDrive) + 2) As Byte ReDim bResult(0 To MAX_PATH * 2 + 1) As Byte lR = QueryDosDeviceW(VarPtr(bDrive(0)), VarPtr(bResult(0)), MAX_PATH) If (lR > 2) Then sDeviceName = bResult sDeviceName = Left(sDeviceName, lR - 2) GetNtDeviceNameForDrive = sDeviceName End If End Function
|
|||
|
||||
|