2,643
社区成员
发帖
与我相关
我的任务
分享
BOOL NUsb::GetHubPortInfo(CHAR *pHubPath, int nIndex, _PortInfo &PortInfo)
{
CAutoHandle hHubDevice;
CHAR szText[1024];
BOOL bRetVal;
CHAR szFullPath[MAXPATH];
USB_NODE_CONNECTION_INFORMATION * pConInfo;
strcpy(szFullPath, "\\\\.\\");
strcat(szFullPath, pHubPath);
strcpy(PortInfo.szHubPath, pHubPath);
PortInfo.nHubPortIndex = nIndex;
PortInfo.bConnected = FALSE;
memset(PortInfo.bzConInfo, 0, sizeof(PortInfo.bzConInfo));
PortInfo.pConInfo = NULL;
hHubDevice = CreateFileA(szFullPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);
if(hHubDevice == NULL || hHubDevice == INVALID_HANDLE_VALUE)
return FALSE;
bRetVal = GetConnectInfo(hHubDevice, nIndex, PortInfo.bzConInfo, &pConInfo);
if(bRetVal == FALSE || pConInfo == NULL)
return FALSE;
PortInfo.pConInfo = pConInfo;
if(pConInfo->ConnectionStatus == NoDeviceConnected)
{
PortInfo.bConnected = FALSE;
return TRUE;
}
PortInfo.bConnected = TRUE;
GetConDrvKeyName(hHubDevice, nIndex, PortInfo.szConDrvKey);
if(PortInfo.pConInfo->DeviceIsHub)
{
GetHubNodeConName(hHubDevice, nIndex, PortInfo.szHubNodeConName);
}
bRetVal = NDev::GetDeviceDescripByKey((GUID)GUID_CLASS_USB_DEVICE, PortInfo.szConDrvKey, PortInfo.szDescrip);
if(bRetVal == FALSE)
assert(0);
GetDescripConfig(hHubDevice, nIndex, &PortInfo);
int i;
int nCount;
std::vector<int> vLangId;
GetDescripLangId(hHubDevice, nIndex, vLangId);
// if(vLangId.size() <= 0)
// vLangId.push_back(0);
nCount = (int)vLangId.size();
for(i=0; i<nCount; i++)
{
if(pConInfo->DeviceDescriptor.iManufacturer)
{
szText[0] = 0;
GetDescripString(hHubDevice, nIndex, pConInfo->DeviceDescriptor.iManufacturer, vLangId[i], szText);
if(PortInfo.szManufacturer[0])
strcat(PortInfo.szManufacturer, ";");
strcat(PortInfo.szManufacturer, szText);
}
if(pConInfo->DeviceDescriptor.iProduct)
{
szText[0] = 0;
GetDescripString(hHubDevice, nIndex, pConInfo->DeviceDescriptor.iProduct, vLangId[i], szText);
if(PortInfo.szProduct[0])
strcat(PortInfo.szProduct, ";");
strcat(PortInfo.szProduct, szText);
}
if(pConInfo->DeviceDescriptor.iSerialNumber)
{
szText[0] = 0;
GetDescripString(hHubDevice, nIndex, pConInfo->DeviceDescriptor.iSerialNumber, vLangId[i], szText);
if(PortInfo.szSerialNumber[0])
strcat(PortInfo.szSerialNumber, ";");
strcat(PortInfo.szSerialNumber, szText);
}
}
return TRUE;
}