Laufwerksinformationen
 Info  
Von : Wolfgang Kluge
 Zusatz  
Printfreundliche Ansicht
Manchmal ist es wichtig, wie beispielsweise die eingelegte CD gekenzeichnet ist, um herauszufinden, ob es sich um die "richtige" CD handelt oder um einfach einen Dialog anzuzeigen(Dateiauswahl), der die Verschiedenen Laufwerke mit Namen anzeigt...

Zusätzlich zur Bezeichnung bekommt man mit der GetVolumeInformation-Funktion noch das Dateisystem, die Seriennummer und weitere Eigenschaften des Laufwerks.

 Deklaration:
Private 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

Private Const FILE_CASE_PRESERVED_NAMES = &H2
Private Const FILE_CASE_SENSITIVE_SEARCH = &H1
Private Const FILE_UNICODE_ON_DISK = &H4
Private Const FILE_PERSISTENT_ACLS = &H8
Private Const FILE_FILE_COMPRESSION = &H10
Private Const FILE_VOLUME_IS_COMPRESSED = &H8000
Private Const FILE_SUPPORTS_ENCRYPTION = &H00020000
Private Const FILE_SUPPORTS_OBJECT_IDS = &H00010000
Private Const FILE_SUPPORTS_REPARSE_POINTS = &H00000080
Private Const FILE_SUPPORTS_SPARSE_FILES = &H00000040
Private Const FILE_VOLUME_QUOTAS = &H00000020


Die wichtigsten Werte will ich kurz ansprechen. Der Rest ist selbsterklärend (sollte so sein).

lpRootPathName : Das Verzeichnis, dessen Informationen ausgelesen werden soll. Ein Backslash sollte am Ende immer mit angegeben werden (auch bei Netzwerklaufwerken).
Unter Windows 95/98 wird bei Netzwerklaufwerken keine Seriennummer zurückgegeben.

lpMaximumComponentLength : Dieser Wert gibt an, wie lange ein Teilstring einer Pfadangabe sein kann(maximal). Ein Teilstring wird durch Backslash´s begrenzt, ist also entweder ein Ordnername oder ein Dateiname.
Dies ist nicht die maximale gesamtlänge einer Pfadangabe!

lpFileSystemFlags : Die FileSystemFlags geben an, welche Eigenschaften dieses Laufwerk / bzw. das Dateisystem unterstützt. Diese richten sich auch stark an das Betriebssystem. So haben lokale Laufwerke unter Win9x niemals Unicode-Unterstützung.

Der Wert setzt sich dabei aus den oben angegebenen Konstanten zusammen.
Zum herausfiltern einzelner Werte einfach mit AND verknüpfen.
' Laufwerksinformationen für Laufwerk C
Dim lpSerialNum As Long, lpComLength As Long, lpFileSysFlag As Long
Dim lpVolName As String, lpFileSysName As String

lpVolName = Space(30)
lpFileSysName = Space(30)

GetVolumeInformation "C:\", lpVolName, 30, lpSerialNum, lpComLength, lpFileSysFlag, lpFileSysName, 30

lpVolName = Left(lpVolName, InStr(1, lpVolName, vbNullChar) - 1)
lpFileSysName = Left(lpFileSysName, InStr(1, lpFileSysName, vbNullChar) - 1)

MsgBox "Bezeichnung : " & lpVolName & vbCrLf & "Dateisystem : " & lpFileSysName & vbCrLf & "Seriennummer : " & CStr(lpSerialNum)

If CBool(lpFileSysFlag And FILE_UNICODE_ON_DISK) Then MsgBox "Das Laufwerk unterstützt Unicode"