2012-04-17 12 views
5

Ich habe eine TXT-Datei mit Datenträger-IDs darin.So erhalten Sie Laufwerksinformationen nach Datenträger-ID

I info (Laufwerksbuchstabe, Plattengröße, etc.) aus dem Laufwerk VolumeID (Windows) Laufwerk bekommen müssen:

die Volumen-ID in folgendem Format ist:

\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} 

Der Laufwerk kann Removable/lokale Festplatte sein

Es spielt keine Rolle, wie die Informationen abgerufen werden (es könnte Skript, cpp, C#, Java-Code sein).

EDIT:

Ich versuchte Driveinfo, Win32_LogicalDisk, Win32_Volume, Win32_PnpDevices zu verwenden - aber ich konnte diese seltsame ID nicht finden ... in allen Fällen die ID ein differ Format

hat UPDATE:

herausgefunden, wie es geht.

können Sie Win32_Volume wie folgt aufzählen:

ManagementObjectSearcher ms = new ManagementObjectSearcher("Select * from Win32_Volume");  
foreach(ManagementObject mo in ms.Get()) 
{ 
    var guid = mo["DeviceID"].ToString(); 

    if(guid == myGuid) 
     return mo["DriveLetter"]; 
} 
+0

Wie hast du diese ID in der TXT-Datei bekommen. Reverse Engineer es, um die Ergebnisse zu erreichen. –

+0

Ich versuche zu verfolgen, wo "File History" (neues Feature in Windows 8) seine Sicherungsdateien speichert. Ich fand, dass der Name des Zielgeräts in einer XML-Datei gespeichert wird, es speichert auch den Laufwerksbuchstaben und den Namen, aber das ist nicht genug, da diese Parameter nicht eindeutig sind und geändert werden können: somene kann das Gerät und dann das nächste Mal auswerfen Es wird ein anderer Buchstabe zugewiesen, usw. ... also habe ich festgestellt, dass Microsoft auch etwas speichert, das wie folgt aussieht: " \\? \ Volume {XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} <\ TargetVolumePath> "Das ist eine einzigartige ID. – user844541

Antwort

2

Volume-Größe, usw. ist einfach. Verwenden Sie einfach die normalen Win32-Methoden. Jede Funktion, die "C:" als Laufwerk akzeptiert, akzeptiert auch den Volume-GUID-Pfad (denn das ist, was ein \\?\Volume{XXX} richtig heißt).

Der "Laufwerksbuchstabe" ist etwas komplizierter, da 0, 1 oder mehr Laufwerksbuchstaben vorhanden sein können. Sie müssen FindFirstVolumeMountPoint/FindNextVolumeMountPoint/FindVolumeMountPointClose anrufen, um alle von ihnen zu erhalten.

+0

Können Sie ein Codebeispiel mit WMI hinzufügen? Ich habe GetVolumeNameForVolumeMountPoint verwendet und es funktioniert, aber ich konnte es nicht mit wmi arbeiten lassen. – user844541

+0

Siehe das Beispiel unter http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspx – MSalters

2

Try Verwendung dieses

System.Management.ManagementObjectSearcher ms = 
new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
foreach (ManagementObject mo in ms.Get()) 
{ 
    //Find by ID 
} 

Einzelheiten Reed diese Win32_DiskDrive class

-2

Sie DriveInfo.GetDrives Method können Informationen erhalten fahren. Hier ist der Beispielcode von MSDN

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

foreach (DriveInfo d in allDrives) 
{ 
    Console.WriteLine("Drive {0}", d.Name); 
    Console.WriteLine(" File type: {0}", d.DriveType); 
    if (d.IsReady == true) 
    { 
     Console.WriteLine(" Volume label: {0}", d.VolumeLabel); 
     Console.WriteLine(" File system: {0}", d.DriveFormat); 
     Console.WriteLine(
      " Available space to current user:{0, 15} bytes", 
      d.AvailableFreeSpace); 

     Console.WriteLine(
      " Total available space:   {0, 15} bytes", 
      d.TotalFreeSpace); 

     Console.WriteLine(
      " Total size of drive:   {0, 15} bytes ", 
      d.TotalSize); 
    } 
} 
+0

Während dieser Code die derzeit auf dem Computer installierten Laufwerke auflistet, die Frage leider nicht beantwortet (d. H. Wie auf Laufwerke mit GUID zugegriffen wird), gibt es keine Eigenschaft in 'DriveInfo', die sich auf die GUID eines Laufwerks bezieht. – jrh

1

Es gibt eine API-Funktion dafür: GetVolumePathNamesForVolumeName

Es gibt eine terminierte Array null, für mehrere Bereitstellungspunkte zu ermöglichen. Wenn Sie nur einen Einhängepunkt (typisch) haben, können Sie ihn als reguläre nullterminierte Zeichenfolge lesen.

Dies ist effizienter als das Aufzählen von Festplatten/Volumes, was dazu führen kann, dass sich leere Festplatten hochdrehen.