I am trying to get the physical device size of a connected USB flash drive. I tried using WMI.
ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
foreach (ManagementObject moDisk in mosDisks.Get())
{
lblCapacity.Text = "Capacity: " + moDisk["Size"];
}
I tried using import to get the geometry:
var geo = new DiskGeometry();
uint returnedBytes;
DeviceIoControl(Handle, 0x70000, IntPtr.Zero, 0, ref geo, (uint)Marshal.SizeOf(typeof(DiskGeometry)), out returnedBytes, IntPtr.Zero);
return geo.DiskSize;
They all return a value .. but this is not true.
For example, the above code returns 250056737280. When I upload all the binary contents to a new file, FileStream.Length returns 250059350015
See how the last option is bigger? This is also the correct size, which I need for my code to work as expected. But I can not reset 250 GB of data to get the full size. So, is there any other way to get the right size?
Eaton source
share