2012-04-17 34 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を取得しましたか?リバースエンジニアリングして結果に到達します。 –

+0

私は "ファイル履歴"(Windows 8の新機能)がそのバックアップファイルを保存している場所を追跡しようとしています。私はターゲットデバイス名がxmlファイルに保存され、ドライブ文字と名前も保存されていることがわかりましたが、これらのパラメータは一意ではなく変更することができるため、十分ではありません。someneはデバイスを取り出してから、それは別の文字が割り当てられているなど...私はまた、次のようなものを保存することがわかりました: " \\?\ Volume {XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} <\ TargetVolumePath>一意のIDです。 – user844541

答えて

2

ボリュームサイズなどは簡単です。通常のWin32メソッドを使用してください。 "C:"をドライブとして受け入れる関数は、が正しく呼び出されるため、のボリュームGUIDパスも受け入れます。

「ドライブレター」は、0,1つ以上のドライブ文字がある可能性があるため、少しトリッキーです。それらをすべて入手するには、FindFirstVolumeMountPoint/FindNextVolumeMountPoint/FindVolumeMountPointCloseに電話する必要があります。

+0

WMIを使用してコードサンプルを追加できますか?私はGetVolumeNameForVolumeMountPointを使用していましたが、動作しますが、wmiを使用して動作させることができませんでした。 – user844541

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspxのサンプルを参照してください。 – MSalters

-2

については、この

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

あなたが情報を駆動得るために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によるドライブへのアクセス方法)。ドライブのGUIDに関連するプロパティはDriveInfoにありません。 – jrh

1

API関数はこのためにあります: GetVolumePathNamesForVolumeName

それは、複数のマウントポイントを可能にするために、ヌル終了配列を返します。マウントポイントが1つしかない場合(通常)、通常のヌル終了文字列として読み取ることができます。

これは、アイドルディスクがスピンアップする原因となるディスク/ボリュームを列挙する方が効率的です。

関連する問題