Try:
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
foreach (ManagementObject mo in mos.Get())
{
ManagementObject query = new ManagementObject("Win32_PhysicalMedia.Tag='" + mo["DeviceID"] + "'");
Console.WriteLine(query["SerialNumber"]);
}
Note: Earlier devices did not expose a device ID (V1.1 and below)