I have a txt file with volume id's in it.
I need to get drive info (drive letter, drive size, etc.) from the drive volume id (Windows):
the volume id is in the following format:
\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
The drive can be Removable/local disk
It doesn't matter how the info is retrieved (it could be script, cpp ,c#, java code).
EDIT:
I tried to use DriveInfo, Win32_LogicalDisk, Win32_Volume, Win32_PnpDevices - but I couldn't find this weird id... in all cases the id has a differrent format
UPDATE:
Found out how to do it.
you can enumerate Win32_Volume like this:
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"];
}
You can use
DriveInfo.GetDrives Method
to get drive info. Here is the sample code from MSDNVolume size, etcetera is easy. Just use the normal Win32 methods. Any function that accepts
"C:"
as a drive will also accept the volume GUID path (because that's what a\\?\Volume{XXX}
is properly called).The "drive letter" is a bit trickier as there may be 0, 1 or more drive letters. You need to call
FindFirstVolumeMountPoint / FindNextVolumeMountPoint / FindVolumeMountPointClose
to get all of them.Try use this
For details reed this Win32_DiskDrive class
There is an API function for this: GetVolumePathNamesForVolumeName
It returns a null terminated array, to allow for multiple mount points. If you have only one mount point (typical), then you can read it as a regular null terminated string.
This is more efficient that enumerating disks/volumes, which could cause idle disks to spin up.