How to get vendor id and product id of a USB device on windows system
I want to get vendor id and product id of usb device which is plugged inside my windows system.
i am trying with win32 api functions.
i can able to know whether device is plugged or unplugged.
but i cant figure out how to get the vendor id and product id information of a usb device .
any links or samples to achieve this.
will this USB_DEVICE_DESCRIPTOR Structure help?
if so any code sample to use that.
Any help would be really great..
Thank you for your time
Re: How to get vendor id and product id of a USB device on windows system
Re: How to get vendor id and product id of a USB device on windows system
Thanks for the information friend.
USB_DEVICE_DESCRIPTOR pDevDesc;
USB_NODE_CONNECTION_INFORMATION pNodeCon;
how can i pass the USB_DEVICE_DESCRIPTOR to the USB_NODE_CONNECTION_INFORMATION structure.
after that i have to use like below for getting device information like vendor id and product id.
DeviceIoControl(hDevice, // device handle
IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION , // info of device property
NULL,
0,
pDevDesc, sizeof(PUSB_DEVICE_DESCRIPTOR), // output data buffer
&dwOutBytes, // out's length
(LPOVERLAPPED)NULL);
I have been searching for a long time but no help .
Kindly help me out.
Re: How to get vendor id and product id of a USB device on windows system
use http://www.libusb.org/
it's cross-platform and GPL, so less worries in future :)
Re: How to get vendor id and product id of a USB device on windows system
You can also scan the registry - Windows keeps a list of plugged in USB devices and there VID/PID for driver purposes, but libusb is more portable.
Re: How to get vendor id and product id of a USB device on windows system
Thank you all for the reply
what about trying with win32 api or WMI.
Re: How to get vendor id and product id of a USB device on windows system
Dear all,
Kindly find my code which i wrote to get get vendor id and product id of a USB device on windows system
// Creates or opens a file or I/O device.
HANDLE hDevice = CreateFile(TEXT("\\\\.\\G:"), // drive to open
0, // no access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL);
PUSB_DEVICE_DESCRIPTOR pDevDesc;
DeviceIoControl(hDevice,// device handle
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION , // info of device property
NULL,
0,
pDevDesc, sizeof(PUSB_DEVICE_DESCRIPTOR), // output data buffer
&dwOutBytes, // out's length
(LPOVERLAPPED)NULL);
qDebug ()<<pDevDesc->iManufacturer;
qDebug ()<<pDevDesc->idProduct;
qDebug ()<<pDevDesc->bLength;
qDebug ()<<pDevDesc->idVendor;
qDebug ()<<pDevDesc->iSerialNumber;
when i print this i get the below output
0
0
3
0
13
are the above output are correct?
if not how can i achive this please guide me i need to get vendor id and product id from the connected usb device?
Any info would be great help
Thank you for your time.
Re: How to get vendor id and product id of a USB device on windows system
Device Manager and right click the device. Windows will show you the VID and PID of the device so you can compare.
But the above seems incorrect.
What are you trying to do exactly? If it's to notice when a device is inserted or removed, there is buildin APIs for this and you will then get a message telling you when a device is inserted or removed - no need to do it yourself. Eg. Look at WM_DEVICECHANGE
Re: How to get vendor id and product id of a USB device on windows system
To be specific , my application has to display the vendor id and product id of a usb device
Any suggestions on this...
Re: How to get vendor id and product id of a USB device on windows system
I'd start with SetupDiGetClassDevs()
Re: How to get vendor id and product id of a USB device on windows system
Thank you fatjuicymole for your reply.
i did tried that do .
below is the code i tried.
HANDLE h = SetupDiGetClassDevs(&GUID_CLASS_COMPORT,NULL,NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if ( h == INVALID_HANDLE_VALUE )
{
qDebug ()<<"invalid";
}
else
{
qDebug ()<<"valid handle";
qDebug ()<<h;
}
Handle is valid .
can you please lead me further to proceed.
Sorry to be annoying because i am very to new Qt and windows programming
Thank you for your time.
Re: How to get vendor id and product id of a USB device on windows system
So your only looking for serial ports?
Re: How to get vendor id and product id of a USB device on windows system
For the usb device i need to get the device informations
Any helps please
Re: How to get vendor id and product id of a USB device on windows system
The code you have written above will only get devices of type 'serial port'. Is that what you want?
Re: How to get vendor id and product id of a USB device on windows system
does the manufacturer of that particular device you are interested in provide some sort of API?
For example FTDI provides an API free of charge for their USB devices.
Re: How to get vendor id and product id of a USB device on windows system
Hello fatjuicymole...
please find my code
static GUID GUID_DEVINTERFACE_USB_DEVICE =
{ 0xA5DCBF10L, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } };
HANDLE hInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICE, NULL,NULL,DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if ( hInfo == INVALID_HANDLE_VALUE )
{
qDebug ()<<"invalid";
}
else
{
qDebug ()<<"valid handle";
qDebug ()<<hInfo;
}
SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
SP_INTERFACE_DEVICE_DATA Interface_Info;
Interface_Info.cbSize = sizeof(Interface_Info);
//
DWORD i;
DWORD InterfaceNumber= 0;
for (i=0;SetupDiEnumDeviceInfo(hInfo,i,&DeviceInfoData );i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;
while (!SetupDiGetDeviceRegistryProperty( hInfo,&DeviceInfoData,SPDRP_DEVICEDESC,&DataT,(PBY TE)buffer,buffersize,&buffersize))
{
//
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
buffer = (LPTSTR)LocalAlloc(LPTR,buffersize);
}
else
{
// Insert error handling here.
break;
}
qDebug ()<<"hhhh";
qDebug ()<<(TEXT("Device Number %i is: %s\n"),i, buffer);
if (buffer) LocalFree(buffer);
}
if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS )
{
// Insert error handling here.
qDebug ()<<"return false";
}
InterfaceNumber = 0; // this just returns the first one, you can iterate on this
//DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData);
if (SetupDiEnumDeviceInterfaces(hInfo,NULL,&GUID_DEVI NTERFACE_USB_DEVICE,InterfaceNumber,&Interface_Inf o))
{
printf("\nGot interface");
DWORD needed;
h = SetupDiGetDeviceInterfaceDetail(hInfo, &Interface_Info, NULL, 0, &needed,&DeviceInfoData);
//qDebug ()<<Interface_Info.InterfaceClassGuid;
}
else
{
printf("\nNo interface");
//ErrorExit((LPTSTR) "SetupDiEnumDeviceInterfaces");
if ( GetLastError() == ERROR_NO_MORE_ITEMS) printf(", since there are no more items found.");
else printf(", unknown reason.");
}
// Cleanup
SetupDiDestroyDeviceInfoList(hInfo);
qDebug ()<<"return true";
//
}
}
Does this code seem correct?
i dont know how to get the information from the device
please lead me further..
Thank you
Re: How to get vendor id and product id of a USB device on windows system
Once you have SetupDiGetDeviceInterfaceDetail working ok, you have the vid and pid already :)
However, you are saying you don't want the information as your passing NULL to that function.
Re: How to get vendor id and product id of a USB device on windows system
can you please provide me some leads to proceed further please.
i am stuck on this fuctionality.you may save me from this problem.
Looking for your guidence
Thank you for your time
Re: How to get vendor id and product id of a USB device on windows system
eg:
Code:
SP_DEVICE_INTERFACE_DETAIL_DATA *pDetData = NULL;
DWORD dwDetDataSize = sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA) + 256;
pDetData = (_SP_DEVICE_INTERFACE_DETAIL_DATA_A*) malloc (dwDetDataSize);
pDetData->cbSize = sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA);
bOk = SetupDiGetDeviceInterfaceDetail (hDevInfo, &ifcData, pDetData, dwDetDataSize, NULL, &devdata);
pDetData->DevicePath contains VID and PID in string form (eg. VID_xxxx&PID_xxxx), or you can use HidD_GetAttributes function in HID.DLL to extract these to a structure:
typedef struct _HIDD_ATTRIBUTES {
ULONG Size;
USHORT VendorID;
USHORT ProductID;
USHORT VersionNumber;
} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES;
Re: How to get vendor id and product id of a USB device on windows system
Thank you for the replay friend...
qDebug ()<<pDetData->DevicePath;
when i print this i get the below result.
0x4
can you please tell me why i get this result as above