[Visual Basic] Datenträger (Partitionen) abfragen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Luca, 19. August 2011 .

  1. 19. August 2011
    Datenträger (Partitionen) abfragen

    Guten Abend zusammen,

    ich bin dabei ein kleines script via Microsoft Visual Basic 2010 zu schreiben, mit welchem ich truecrypt-verschlüsselte datenträger und container einbinden kann.

    nun suche ich nach einem weg, wie ich die existenz von partitionen bspw. mit dem format "\Device\Harddisk0\Partition1" abfragen kann.

    mein code sieht bisher wie folgt aus:
    Code:
     Dim schleife1 As Integer
     Dim schleife2 As Integer
     Dim dev As String
     Dim dev_len As Integer
    
     For schleife1 = 0 To 5
     dev = "\Device\Harddisk" + CStr(schleife1) + "\Partition"
     For schleife2 = 1 To 5
     dev = dev + CStr(schleife2)
     'HIER ABFRAGE OB DIESE PARTITION EXISTIERT'
     dev_len = Len(dev)
     dev = dev.Substring(0, dev_len - 1)
     Next
     Next
    die abfrage von laufwerken habe ich bereits implementiert, jedoch bringt sie mich an dieser stelle kein stück weiter

    Code:
    Dim myDirectory As New IO.DirectoryInfo(...) 
     If myDirectory.Exists Then
     'Laufwerk besetzt - ausblenden'
     Else
     'Laufwerk frei - einblenden'
     End If
    kennt einer für mein problem eine möglichleit, womit ich statt der laufwerksbuchstaben die existenz von partitionen mit dem format "\Device\Harddisk0\Partition1" abfragen kann?

    vielen dank schonmal für eure mühe...

    gruß luca
     
  2. 19. August 2011
    AW: Datenträger (Partitionen) abfragen

    musst mal nach einer API schauen, ich glau in VB gibt es keine Funktion oder so was dafür
     
  3. 19. August 2011
    AW: Datenträger (Partitionen) abfragen

    nach längerer suche habe ich einen code-schnipsel so umbauen können, dass ich zumindest alle partitionen angezeigt bekomme, welchen laufwerksbuchstaben zugewiesen wurden.
    Code:
     Dim ComputerName As String
     Dim wmiServices As Object
     Dim objWMIService As Object
     Dim wmiDiskDrives As Object
     Dim wmiDiskDrive As Object
     Dim strEscapedDeviceID As String
     Dim wmiDiskPartitions As Object
     Dim wmiDiskPartition As Object
     Dim sOut As String
     Dim wmiLogicalDisks As Object
     Dim errResult As Object
     Dim wmiLogicalDisk As Object
    
     On Error GoTo errSub
    
     'Aktueller Rechner'
     ComputerName = "."
    
     'WMI-Objekt erstellen'
     wmiServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!//" & ComputerName & "\root\cimv2")
    
     'WMI-Abfrage erstellen'
     wmiDiskDrives = wmiServices.ExecQuery("SELECT * FROM Win32_DiskDrive")
    
     'Physische Laufwerke ermitteln (=Festplatten, NICHT Partitionen)'
     ' Infos von http://msdn.microsoft.com/en-us/library/aa394132%28VS.85%29.aspx'
     For Each wmiDiskDrive In wmiDiskDrives
     On Error Resume Next
     sOut = sOut & "Device" & vbTab & wmiDiskDrive.Caption &
     vbNewLine &
     "ID" & vbTab & wmiDiskDrive.DeviceID.ToString.Remove(0, 4) &
     vbNewLine &
     "Partition" & vbTab & wmiDiskDrive.Partitions &
     vbNewLine
    
     'Backslash in disk drive deviceid must be escaped by "\"
     strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, "\", "\\", 1, -1, vbTextCompare)
    
     'Use the disk drive device id to find associated partition'
     wmiDiskPartitions = wmiServices.ExecQuery("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & strEscapedDeviceID & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition")
    
     'Logische Laufwerke des physischen Laufwerks ermitteln (=Partitionen)'
     For Each wmiDiskPartition In wmiDiskPartitions
     wmiLogicalDisks = wmiServices.ExecQuery("ASSOCIATORS OF " & "{Win32_DiskPartition.DeviceID=""" & wmiDiskPartition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition")
    
     For Each wmiLogicalDisk In wmiLogicalDisks
     On Error Resume Next
     sOut = sOut &
     vbTab &
     wmiDiskPartition.DeviceID & " (" & wmiLogicalDisk.DeviceID & "\) " & Math.Round(wmiDiskPartition.Size / (1024 * 1024 * 1024), 3) & " GB" &
     vbNewLine
     'wmiDiskPartition.Index: Ausgabe "1" für 1. Partition"'
     'wmiDiskPartition.DeviceID: Ausgabe "Disk #0, Partition #1" für 1. Partition'
     Next
     Next
    
     'Absatz für neue Festplatte'
     sOut = sOut & vbNewLine
    
     Next
    
     MsgBox(sOut)
     Exit Sub
    errSub:
     MsgBox(Err.Description)
    

    das ganze ergibt dann bei mir folgende ausgabe (die vbTab werden hier leider nicht richtig dargestellt)

    Device ST9250320AS ATA Device
    ID PHYSICALDRIVE0
    Partition 6
    Disk #0, Partition #1 (C:\) 64,746 GB
    Disk #0, Partition #3 (B:\) 168,006 GB


    Device WDC WD10 EAVS-00D7B1 USB Device
    ID PHYSICALDRIVE1
    Partition 1
    Disk #1, Partition #0 (H:\) 931,511 GB



    ich werde mal ein wenig weiter suchen, ob ich auch jene partitionen anzeigen lassen kann, die keine laufwerksbuchstaben zugewiesen bekommen haben.
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.