J'essaie d'obtenir la taille du périphérique physique d'une clé USB connectée. J'ai essayé d'utiliser WMI.Obtenir correctement la taille du disque
ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
foreach (ManagementObject moDisk in mosDisks.Get())
{
lblCapacity.Text = "Capacity: " + moDisk["Size"];
}
J'ai essayé d'utiliser les importations pour obtenir la géométrie:
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;
Ils font tous retourner une valeur .. mais ce n'est pas correct.
Par exemple, le code ci-dessus renvoie 250056737280. Lorsque je vide l'intégralité du contenu binaire dans un nouveau fichier, FileStream.Length retourne 250059350015
Voyez comment la dernière option est plus grand? C'est aussi la taille corrrect que j'ai besoin pour que mon code fonctionne comme prévu. Mais je ne peux pas sauvegarder 250 Go de données juste pour obtenir la taille réelle. Y a-t-il une autre méthode pour obtenir la bonne taille?
Intéressant. Où puis-je trouver ces énumérations comme entiers pour que je puisse mettre la valeur correcte? – Eaton
Les constantes sont définies dans WinIoCtl.h. La valeur de IOCTL_DISK_GET_LENGTH_INFO est 0x0007405c –
Merci, je vais essayer de le faire bientôt et vous faire part de mes résultats. – Eaton