Problem on getting the vendor id and product id of a usb device

Posted by new on Stack Overflow See other posts from Stack Overflow or by new
Published on 2010-05-31T14:09:09Z Indexed on 2010/05/31 14:13 UTC
Read the original article Hit count: 291

Filed under:
|
|
|
|

Hi...

my application comes and prints this

"\?\usb#vid_04f2&pid_0111#5&1ba5a77f&0&2#{a5dcbf1 0-6530-11d2-901f-00c04fb951ed}"

again it goes to while loop ....

here it gets breaked in the else statement...

Qt Code:

if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
 {
            // Change the buffer size.
           if (buffer) LocalFree(buffer);

           buffer = (LPTSTR)LocalAlloc(LPTR,buffersize);

}

else
{
     qDebug ()<<"Here it quits the application";

    // Insert error handling here.
   break;

 }

Any ideas in this....

full source code comes here

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"; 

SP_DEVINFO_DATA DeviceInfoData;

DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);

SP_INTERFACE_DEVICE_DATA Interface_Info; 

Interface_Info.cbSize = sizeof(Interface_Info);

BYTE Buf[1024];

DWORD i;

DWORD InterfaceNumber= 0;

PSP_DEVICE_INTERFACE_DETAIL_DATA pspdidd = 

(PSP_DEVICE_INTERFACE_DETAIL_DATA) Buf;

for (i=0;SetupDiEnumDeviceInfo(hInfo,i,&DeviceInfoData);i++)

{

DWORD DataT;

LPTSTR buffer = NULL;

DWORD buffersize = 0;

while (!SetupDiGetDeviceRegistryProperty( hInfo,

&DeviceInfoData,SPDRP_DEVICEDESC,

&DataT,(PBYTE)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 ()<<(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

if (SetupDiEnumDeviceInterfaces(hInfo,

NULL, 

&GUID_DEVINTERFACE_USB_DEVICE,

InterfaceNumber,

&Interface_Info))

{

printf("Got interface");

DWORD needed;

pspdidd->cbSize = sizeof(*pspdidd); 

SP_DEVICE_INTERFACE_DETAIL_DATA *pDetData = NULL;

DWORD dwDetDataSize = sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA) + 256;

pDetData = (SP_DEVICE_INTERFACE_DETAIL_DATA*) malloc (dwDetDataSize);

pDetData->cbSize = sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA);

SetupDiGetDeviceInterfaceDetail(hInfo,&Interface_Info,

pDetData,dwDetDataSize, NULL,&DeviceInfoData);

qDebug ()<<pDetData->DevicePath;

qDebug ()<<QString::fromWCharArray(pDetData->DevicePath);

free(pDetData);

}

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);

}

}

}

© Stack Overflow or respective owner

Related posts about c++

Related posts about Windows