[C#] Lister les périphériques de stockage USB en utilisant WMI

Il arrive que l’on doive détecter les disques dur connectés à l’ordinateur par USB.

Il existe certes la classe DriveInfo de l’espace de nom System.IO. Mais après différents tests, j’ai constaté que lorsqu’on l’utilisait pour obtenir les informations concernant un disque dur externe connecté en USB, la propriété DriveType de cette classe renvoyait la valeur Fixed alors qu’on aurait pu s’attendre à la valeur Removable. Donc en utilisant cette classe, un disque dur externe USB est reconnu comme s’il s’agissait d’un disque interne de la machine.

Il existe toutefois une solution en utilisant WMI (Windows Management Instrumentation). Il permet entre autre d’accéder aux ressources d’un ordinateur et d’en obtenir les informations.

Voici donc un exemple de code permettant de récupérer la liste des lecteurs logiques se trouvant sur des disques dur connectés via USB :

foreach (ManagementObject drive in new ManagementObjectSearcher("select * from Win32_DiskDrive where InterfaceType='USB'").Get())
{
    foreach (ManagementObject partition in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"] + "'} WHERE AssocClass =Win32_DiskDriveToDiskPartition").Get())
    {
       foreach (ManagementObject disk in new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + partition["DeviceID"] + "'} WHERE AssocClass =Win32_LogicalDiskToPartition").Get())
        {
            Console.WriteLine(disk["Name"]);
        }
    }
}

L’espace de nom à inclure étant System.Management

Laisser un commentaire