Функция GetVolumeInformation

Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" ( _
    ByVal lpRootPathName As String,  _
    ByVal lpVolumeNameBuffer As String,  _
    ByVal nVolumeNameSize As Long,  _
    lpVolumeSerialNumber As Long,  _
    lpMaximumComponentLength As Long,  _
    lpFileSystemFlags As Long,  _
    ByVal lpFileSystemNameBuffer As String,  _
    ByVal nFileSystemNameSize As Long) As Long

GetVolumeInformation определяет серийный номер, метку диска и его файловую систему. Если Вы пытаетесь получить информацию относительно дисковода для гибких дискет, который не имеет гибкого диска или CD-ROM, в котором нет компакт-диска, система отображает окно с сообщением,что нужно вставить гибкий диск или компакт-диск. Чтобы предотвратить систему от отображения этого окна сообщений, вызовите функцию SetErrorMode с параметром SEM_FAILCRITICALERRORS.

lpRootPathName
Корневой каталог диска, например "c:\" или "a:\"
lpVolumeNameBuffer
Буфер, который получает имя указанного диска
nVolumeNameSize
Длина буфера в символах. Этот параметр игнорируется, если буфер пуст
lpVolumeSerialNumber
Указатель на переменную, которая получает серийный номер диска. Этот параметр может быть НУЛЕВОЙ(NULL), если серийный номер не требуется.
lpMaximumComponentLength
Переменная, которая получает максимальную длину в символах компонента имени файла, поддержанного указанной файловой системой. Компонент имени файла - та часть имени файла между наклонными чертами влево. Значение, сохраненное в переменной, указанной lpMaximumComponentLength используется, чтобы указать,что длинные имена поддерживаются указанной файловой системой. Например, для файловой системы FAT, поддерживающей длинные имена, функция сохраняет значение 255
lpFileSystemFlags
Переменная, которая получает флажки, связанные с указанной файловой системой. Возможны любые комбинации следующих флажков; однако, FS_FILE_COMPRESSION и FS_VOL_IS_COMPRESSED взаимоисключающи:
FS_CASE_IS_PRESERVEDПри записи на диск сохраняется регистр букв в имени файла
FS_CASE_SENSITIVEФайловая система поддерживает поиск файлов с учетом регистра букв в именах
FS_UNICODE_STORED_ON_DISKФайловая система поддерживает хранение на диске имен файлов в UNICODE
FS_PERSISTENT_ACLSФайловая система способна оперировать со списками контроля доступа(ACL). Доступно только в NTFS
FS_FILE_COMPRESSIONФайловая система поддерживает сжатие файлов
FS_VOL_IS_COMPRESSEDЕсли этот флаг установлен, то том, информация о котором запрашивается, был подвергнут сжатию (напр. DoubleSpace)
FILE_NAMED_STREAMSФайловая система поддерживает именованные потоки
FILE_SUPPORTS_ENCRYPTIONФайловая система поддерживает Encrypted File System (EFS)
FILE_SUPPORTS_OBJECT_IDSФайловая система поддерживает идентификаторы объектов
FILE_SUPPORTS_REPARSE_POINTSФайловая система поддерживает точки повторного разбора
FILE_SUPPORTS_SPARSE_FILESФайловая система поддерживает разреженные файлы
FILE_VOLUME_QUOTASФайловая система поддерживает дисковые квоты
lpFileSystemNameBuffer
Указатель на буфер,который получает название файловой системы (типа FAT или NTFS). Если параметр равен NULL, то имя файловой системы не возвращается
nFileSystemNameSize
Определяет длину в символах буфера для имени файловых систем. Этот параметр игнорируется, если буфер для имени файловых систем не указан

Пример

Dim Serial As Long, VName As String, FSName As String   
VName = String$(255, Chr$(0))
FSName = String$(255, Chr$(0))
' получаем информацию о диске
GetVolumeInformation "C:\", VName, 255, Serial, 0, 0, FSName, 255
VName = Left$(VName, InStr(1, VName, Chr$(0)) - 1)
FSName = Left$(FSName, InStr(1, FSName, Chr$(0)) - 1)
Debug.Print "Имя диска "; VName
Debug.Print "Файловая система "; FSName
Debug.Print "Серийный номер диска "; Trim(Str$(Serial))

Категория

Системная информация