2012-04-17 8 views
5

Ho un file txt con l'id del volume.Come ottenere informazioni sull'unità per numero di volume

ho bisogno di ottenere guidare informazioni (lettera di unità, dimensioni del disco, ecc) dal id volume di unità (Windows):

il volume id è il seguente formato:

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

Il l'unità può essere rimovibile/disco locale

Non importa come vengono recuperate le informazioni (potrebbe essere script, cpp, C#, codice java).

EDIT:

Ho cercato di usare DriveInfo, Win32_LogicalDisk, Win32_Volume, Win32_PnpDevices - ma non ho potuto trovare questo strano id ... in tutti i casi l'id ha un formato differrent

AGGIORNAMENTO:

Ha trovato il modo di farlo.

è possibile enumerare Win32_Volume come questo:

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

Come hai ottenuto quell'ID nel file txt. Reverse Engineer per raggiungere i risultati. –

+0

Sto cercando di rintracciare dove "Cronologia file" (nuova funzionalità di Windows 8) sta salvando i suoi file di backup. Ho scoperto che il nome del dispositivo di destinazione viene salvato in un file xml, salva anche la lettera e il nome dell'unità, ma questo non è sufficiente perché questi parametri non sono univoci e possono essere modificati: somene può espellere il dispositivo e quindi alla prossima volta assegnerà una lettera diversa, ecc ... quindi ho scoperto che microsoft salva anche qualcosa che assomiglia al seguente: " \\? \ Volume {XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} <\ TargetVolumePath> "che è un unico ID. – user844541

risposta

2

La dimensione del volume, eccetera, è semplice. Basta usare i normali metodi Win32. Qualsiasi funzione che accetta "C:" come unità accetterà anche il percorso GUID volume (perché è ciò che viene chiamato correttamente \\?\Volume{XXX}).

La "lettera di unità" è un po 'più complicata in quanto potrebbero esserci 0, 1 o più lettere di unità. Devi chiamare lo FindFirstVolumeMountPoint/FindNextVolumeMountPoint/FindVolumeMountPointClose per ottenerli tutti.

+0

Puoi aggiungere un esempio di codice usando WMI? Ho usato GetVolumeNameForVolumeMountPoint e funziona, ma non ho potuto farlo funzionare usando wmi. – user844541

+0

Vedere l'esempio su http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspx – MSalters

2

uso provare questo

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

Per i dettagli canna questo Win32_DiskDrive class

-2

È possibile utilizzare DriveInfo.GetDrives Method per ottenere informazioni guidare. Ecco il codice di esempio da 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

Mentre questo codice elenca le unità attualmente installate sul computer, sfortunatamente non risponde alla domanda (ad esempio, come accedere alle unità tramite GUID), non esiste alcuna proprietà in 'DriveInfo' relativa al GUID di un'unità. – jrh

1

C'è una funzione API per questo: GetVolumePathNamesForVolumeName

Riporta una matrice terminato nullo, per consentire più punti di montaggio. Se si dispone di un solo punto di montaggio (tipico), è possibile leggerlo come una normale stringa terminata da null.

Questo è più efficiente dell'enumerazione di dischi/volumi, che potrebbe causare la rotazione dei dischi inattivi.

Problemi correlati