2012-04-17 46 views
5

我有一個帶有卷ID的txt文件。如何通過卷ID獲取驅動器信息

我需要開車從驅動卷ID(Windows)中的信息(驅動器盤符,驅動器大小等):

卷ID是按以下格式:

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

的驅動器可以移動/本地磁盤

信息如何檢索(它可以是腳本,cpp,c#,java代碼)並不重要。

編輯:

我試圖使用DriveInfo,的Win32_LogicalDisk,Win32_Volume,Win32_PnpDevices - 但我找不到這個奇怪的ID ......在所有情況下的ID有differrent格式

更新:

找到了如何做到這一點。

可以列舉Win32_Volume這樣的:

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

你是怎麼得到txt文件中的id的。對其進行逆向工程以達到結果。 – 2012-04-17 07:34:19

+0

我正試圖追蹤「文件歷史」(Windows 8中的新功能)在哪裏保存其備份文件。我發現目標設備名稱保存在一個xml文件中,它也保存了驅動器號和名稱,但這還不夠,因爲這些參數不是唯一的,可以更改:somene可以彈出設備,然後在下一次它會分配一個不同的字母等等,所以我發現微軟也保存瞭如下所示的內容:「 \\?\ Volume {XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} <\ TargetVolumePath> 「這是唯一的ID。 – user844541 2012-04-17 07:43:41

回答

2

容量大小等是很容易的。只需使用普通的Win32方法即可。任何接受"C:"作爲驅動器的功能也將接受卷的GUID路徑(因爲這正是調用\\?\Volume{XXX}的原因)。

「驅動器號」有點棘手,因爲可能有0個,1個或多個驅動器號。您需要致電FindFirstVolumeMountPoint/FindNextVolumeMountPoint/FindVolumeMountPointClose以獲取所有這些信息。

+0

您可以使用WMI添加代碼示例嗎?我使用了GetVolumeNameForVolumeMountPoint,它工作,但我無法使用wmi工作。 – user844541 2012-04-17 08:06:06

+0

請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspx上的示例 – MSalters 2012-04-17 11:20:42

2

嘗試使用這種

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

詳情蘆葦這個Win32_DiskDrive class

-2

您可以使用DriveInfo.GetDrives Method拿到駕駛信息。以下是來自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

雖然此代碼確實列出了當前安裝在計算機上的驅動器,但不幸的是,它沒有回答這個問題(即,如何通過GUID訪問驅動器),但DriveInfo中沒有與驅動器的GUID相關的屬性。 – jrh 2017-12-06 13:21:06

1

有這個API函數: GetVolumePathNamesForVolumeName

它返回一個空值終止陣列,以允許多個安裝點。如果您只有一個安裝點(典型),那麼您可以將其作爲普通的空字符串讀取。

這樣可以更有效地枚舉磁盤/卷,這可能會導致空閒磁盤旋轉起來。

相關問題