Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get VID/PID from USB Flash drives in C#?

I need to perform a check on all drives and see if any of the VIDs/PID match a specific one, if it does I need to get the drive letter of that flash drive. Thanks to all!

like image 585
user1172635 Avatar asked Apr 07 '12 19:04

user1172635


People also ask

How do I find VID and PID of USB?

Go to Control Panel > Device Manager and find your USB device. Double click the device or right click and select Properties. Go to the Details tab and select Hardware ID to view its PID and VID.

How do I get USB PID?

Identify the PID VID of a USB DeviceUnder the Property drop-down menu, select Hardware Ids. Once Properties have opened, navigate to the Details tab. Under the Property drop-down menu, select Hardware Ids. If the device contains a VID and PID, the values will be displayed on the screen.

What is PID in USB?

USB vendor IDs (VID) and product IDs (PID) are 16-bit numbers used to identify USB devices to a computer or other host. Each vendor ID is assigned by the USB Implementers Forum to a specific company, which in turn assign a PID to individual products.


1 Answers

WMI should be able to handle this...

You will have to add a Reference to the System.Management dll and you will need to have the: "using System.Management;" line... See Link At Bottom for Screenshots, more thorough explanation...

using System.Management;
// Get all the disk drives

ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

// Loop through each object (disk) retrieved by WMI

foreach (ManagementObject moDisk in mosDisks.Get())

{

    // Add the HDD to the list (use the Model field as the item's caption)

    cmbHdd.Items.Add(moDisk["Model"].ToString());

}


private void cmbHdd_SelectedIndexChanged(object sender, EventArgs e)

{

// Get all the disk drives from WMI that match the Model name selected in the ComboBox

ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");

// Loop through the drives retrieved, although it should normally be only one loop going on here

foreach (ManagementObject moDisk in mosDisks.Get())

{

    // Set all the fields to the appropriate values

    lblType.Text = "Type: " + moDisk["MediaType"].ToString();

    lblModel.Text = "Model: " + moDisk["Model"].ToString();

    lblSerial.Text = "Serial: " + moDisk["SerialNumber"].ToString();

    lblInterface.Text = "Interface: " + moDisk["InterfaceType"].ToString();

    // The capacity in gigabytes is easily calculated 

    lblCapacity.Text = "Capacity: " + moDisk["Size"].ToString() + " bytes (" + Math.Round(((((double)Convert.ToDouble(moDisk["Size"]) / 1024) / 1024) / 1024), 2) + " GB)";

    lblPartitions.Text = "Partitions: " + moDisk["Partitions"].ToString();

    lblSignature.Text = "Signature: " + moDisk["Signature"].ToString();

    lblFirmware.Text = "Firmware: " + moDisk["FirmwareRevision"].ToString();

    lblCylinders.Text = "Cylinders: " + moDisk["TotalCylinders"].ToString();

    lblSectors.Text = "Sectors: " + moDisk["TotalSectors"].ToString();

    lblHeads.Text = "Heads: " + moDisk["TotalHeads"].ToString();

    lblTracks.Text = "Tracks: " + moDisk["TotalTracks"].ToString();

    lblBytesPerSect.Text = "Bytes per Sector: " + moDisk["BytesPerSector"].ToString();

    lblSectorsPerTrack.Text = "Sectors per Track: " + moDisk["SectorsPerTrack"].ToString();

    lblTracksPerCyl.Text = "Tracks per Cylinder: " + moDisk["TracksPerCylinder"].ToString();

    }

}

From MSDN the win32 Class for CIM_DiskDrive has the following parameters:

*It looks as if "DeviceID" is what you want...

class Win32_DiskDrive : CIM_DiskDrive
{
  uint16   Availability;
  uint32   BytesPerSector;
  uint16   Capabilities[];
  string   CapabilityDescriptions[];
  string   Caption;
  string   CompressionMethod;
  uint32   ConfigManagerErrorCode;
  boolean  ConfigManagerUserConfig;
  string   CreationClassName;
  uint64   DefaultBlockSize;
  string   Description;
  string   DeviceID;
  boolean  ErrorCleared;
  string   ErrorDescription;
  string   ErrorMethodology;
  string   FirmwareRevision;
  uint32   Index;
  datetime InstallDate;
  string   InterfaceType;
  uint32   LastErrorCode;
  string   Manufacturer;
  uint64   MaxBlockSize;
  uint64   MaxMediaSize;
  boolean  MediaLoaded;
  string   MediaType;
  uint64   MinBlockSize;
  string   Model;
  string   Name;
  boolean  NeedsCleaning;
  uint32   NumberOfMediaSupported;
  uint32   Partitions;
  string   PNPDeviceID;
  uint16   PowerManagementCapabilities[];
  boolean  PowerManagementSupported;
  uint32   SCSIBus;
  uint16   SCSILogicalUnit;
  uint16   SCSIPort;
  uint16   SCSITargetId;
  uint32   SectorsPerTrack;
  string   SerialNumber;
  uint32   Signature;
  uint64   Size;
  string   Status;
  uint16   StatusInfo;
  string   SystemCreationClassName;
  string   SystemName;
  uint64   TotalCylinders;
  uint32   TotalHeads;
  uint64   TotalSectors;
  uint64   TotalTracks;
  uint32   TracksPerCylinder;
};

Top Portion oF Code Taken From:

http://www.geekpedia.com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html

like image 106
John Bartels Avatar answered Sep 25 '22 21:09

John Bartels