Private Declare Function GetVolumeInformation& Lib "kernel32" Alias _
"GetVolumeInformationA" (ByVal lpRootPathName As String, _ ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _ lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _ lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _ ByVal nFileSystemNameSize As Long) Const MAX_PATH = 260 Const FILE_CASE_SENSITIVE_SEARCH = &H1 Const FILE_CASE_PRESERVED_NAMES = &H2 Const FILE_UNICODE_ON_DISK = &H4 Const FILE_PERSISTENT_ACLS = &H8 Const FILE_FILE_COMPRESSION = &H10 Const FILE_VOLUME_IS_COMPRESSED = &H8000 ' return volume name, serial number and file system (eg "FAT") for a given drive ' it fails with removable drives if the disk isn't in place ' the FileSystemFlags argument is a combination of the FILE_* constats ' (see MSDN for additional information) ' ' you can specify an UNC for the drive name ' (e.g."\\MyServer\MyShare as \\MyServer\MyShare\" ' Under Windows95/98 the serial number of network drives isn't returned ' ' Returns True if all information has been retrieved successfully Function GetDriveInfo(ByVal DriveName As String, Optional VolumeName As String, _ Optional SerialNumber As Long, Optional FileSystem As String, _ Optional FileSystemFlags As Long) As Boolean Dim ignore As Long ' if it isn't a UNC path, enforce the correct format If InStr(DriveName, "\\") = 0 Then DriveName = Left$(DriveName, 1) & ":\" End If ' prepare receiving buffers SerialNumber = 0 FileSystemFlags = 0 VolumeName = String$(MAX_PATH, 0) FileSystem = String$(MAX_PATH, 0) ' The API function return a non-zero value if successful GetDriveInfo = GetVolumeInformation(DriveName, VolumeName, Len(VolumeName), _ SerialNumber, ignore, FileSystemFlags, FileSystem, Len(FileSystem)) ' drop characters in excess VolumeName = Left$(VolumeName, InStr(VolumeName, vbNullChar) - 1) FileSystem = Left$(FileSystem, InStr(FileSystem, vbNullChar) - 1) End Function |