亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbidentify.cpp

?? 可以在WINDOW下掃描出USB裝置的PID,VID
?? CPP
字號:
// UsbIdentify.cpp: implementation of the CUsbIdentify class.
//
//////////////////////////////////////////////////////////////////////

#include "afx.h"
#include "UsbIdentify.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CUsbIdentify::CUsbIdentify()
{
	m_Usbdev = NULL;
}

CUsbIdentify::~CUsbIdentify()
{
	if (m_Usbdev)
	{
		delete [] m_Usbdev;
		m_Usbdev = NULL;
	}
}

void CUsbIdentify::OutErrorMsg(LPCTSTR lpszMsg)
{
	MessageBox(m_hWnd, lpszMsg, "Results", MB_OK | MB_ICONEXCLAMATION);
//	SendMessage(m_hWnd, WM_REPORT, (WPARAM)lpszMsg, 0);
}


void CUsbIdentify::OnAddNewDevice(WPARAM wParam, LPARAM lParam)
{
	CString temp,temp1,szDesc;
	CONNECTED_DEVICE *pDev = (CONNECTED_DEVICE*)wParam;	
	
	//temp.Format("Device : %s\r\n", pDev->szDesc);
	//temp1 += temp;

	//temp.Format("Controller ID : %d(Self define)\r\n", pDev->dwControllerID);
 //temp1 += temp;

	temp.Format("Port ID : %d(Self define)\r\n", pDev->dwPortID);
	//temp1 += temp;
	temp.Format("VID=%04X ", pDev->idVendor);

	szDesc += temp;
//	temp1 += temp;
	temp.Format("PID=%04X ", pDev->idProduct);
	szDesc += temp;
//		temp.Format("name=%s ", pDev->szDesc);
//	temp1 += temp;
//	szDesc += temp;

	temp.Format("Manufacturer ID: 0x%02X\r\n", pDev->idManufacturer);

//	temp1 += temp;
	temp.Format("Speed=%04X", pDev->bcdUSB);
	szDesc += temp;
//	temp1 += temp;
	
//	temp.Format("USB speed : %02d\r\n(0->Full or Low Speed, =0 High-Speed)\r\n", pDev->speed);
//	szDesc += temp;
//	temp1 += temp;

//	temp.Format("Device Type : %s\r\n", pDev->bIsStorageDevice ? "USB disk" : "Unknown Device");
	szDesc += temp1;
	temp1 += temp;
  printf("----------------------------------------------\n\r%s\r\n",szDesc);
 // printf("------------------------device info is------------\n\r\n%s\r\n",temp1);

}



void CUsbIdentify::RefershDevice(HWND hWnd)
{
	if (m_Usbdev)
	{
		delete [] m_Usbdev;
		m_Usbdev = NULL;
	}

	m_Usbdev = new CONNECTED_DEVICE[MAX_USB_DEVICES];
	memset(m_Usbdev, 0, MAX_USB_DEVICES * sizeof(CONNECTED_DEVICE));
	
	m_nDevConn = 0;
	
	m_hWnd = hWnd;

	EnumHostController();
}

void CUsbIdentify::EnumHostController()
{
	TCHAR buff[16] = {0};
	CString	szRtHubName = "";

	for (int i = 0; i < NUM_OF_CONTROLLER; i++)
	{
		memset(buff, 0, sizeof(buff));
		sprintf(buff, _T("\\\\.\\HCD%d"), i);

		HANDLE hHcd = CreateFile(buff,
								 GENERIC_WRITE | GENERIC_READ,
								 FILE_SHARE_WRITE,
								 NULL,
								 OPEN_EXISTING,
								 0,
								 NULL);

		if (hHcd != INVALID_HANDLE_VALUE)
		{
			szRtHubName = GetRtHubName(hHcd);

			if (szRtHubName != "")
			{
				EnumRtHub(szRtHubName, i);
			}

			CloseHandle(hHcd);
		}

	}	
}

CString CUsbIdentify::GetRtHubName(HANDLE hHcd)
{
	USB_ROOT_HUB_NAME	name = {0};
	PUSB_ROOT_HUB_NAME	pName = NULL;
	BOOL				success = FALSE;
	DWORD				dwBytes = 0;
	CString				szRtName = "";
	
	success = ::DeviceIoControl(hHcd,
								IOCTL_USB_GET_ROOT_HUB_NAME,
								NULL,
								0,
								&name,
								sizeof(name),
								&dwBytes,
								NULL);

	if (success)
	{
		dwBytes = name.ActualLength;
		pName = (PUSB_ROOT_HUB_NAME)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytes);

		success = ::DeviceIoControl(hHcd,
									IOCTL_USB_GET_ROOT_HUB_NAME,
									NULL,
									0,
									pName,
									dwBytes,
									&dwBytes,
									NULL);

		if (success)
		{
			szRtName = WideToChar(pName->RootHubName);
		}
		
		HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, pName);
		pName = NULL;
	}
	
	return szRtName;
}

void   CUsbIdentify::EnumRtHub(CString szRtHubName, DWORD dwControllerID)
{
	szRtHubName = "\\\\.\\" + szRtHubName;
	BOOL	success = FALSE;
	DWORD	dwBytes = 0;

	HANDLE hRtHub = ::CreateFile((LPCTSTR)szRtHubName,
								 GENERIC_WRITE | GENERIC_READ,
								 FILE_SHARE_READ | FILE_SHARE_WRITE,
								 NULL,
								 OPEN_EXISTING,
								 0,
								 NULL);

	if (hRtHub != INVALID_HANDLE_VALUE)
	{
		USB_NODE_INFORMATION	info;
		info.NodeType = UsbHub;

		success = ::DeviceIoControl(hRtHub,
									IOCTL_USB_GET_NODE_INFORMATION,
									&info,
									sizeof(USB_NODE_INFORMATION),
									&info,
									sizeof(USB_NODE_INFORMATION),
									&dwBytes,
									NULL);
		if (success)
		{
			EnumHubPorts(hRtHub, dwControllerID, info.u.HubInformation.HubDescriptor.bNumberOfPorts);
		}

		CloseHandle(hRtHub);
		hRtHub = NULL;
	}
}

void   CUsbIdentify::EnumHubPorts(HANDLE hRtHub, DWORD dwControllerID, DWORD dwNumOfPorts)
{
	PUSB_NODE_CONNECTION_INFORMATION		pinfo		= NULL;	
	BOOL									success		= FALSE;
	DWORD									dwBytes		= 0;
	ULONG									len			= 0;

	len = sizeof(USB_NODE_CONNECTION_INFORMATION);
//	len	= sizeof(USB_NODE_CONNECTION_INFORMATION) + sizeof(USB_PIPE_INFO) * 30;
	pinfo = (PUSB_NODE_CONNECTION_INFORMATION)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);

	for (int i = 1; i <= (int)dwNumOfPorts; i++)
	{
		memset(pinfo, 0, len);
		pinfo->ConnectionIndex = i;

		success = ::DeviceIoControl(hRtHub,
									IOCTL_USB_GET_NODE_CONNECTION_INFORMATION,
									pinfo,
									len,
									pinfo,
									len,
									&dwBytes,
									NULL);
		if (success)
		{
			if (pinfo->ConnectionStatus == DeviceConnected)
			{
				m_nDevConn++;
				CString szDesc = GetDeviceDesc(hRtHub, i);
				
				m_Usbdev[m_nDevConn].idManufacturer = pinfo->DeviceDescriptor.iManufacturer;
				m_Usbdev[m_nDevConn].idProduct = pinfo->DeviceDescriptor.idProduct;
				m_Usbdev[m_nDevConn].idVendor = pinfo->DeviceDescriptor.idVendor;
				m_Usbdev[m_nDevConn].dwControllerID = dwControllerID;
				m_Usbdev[m_nDevConn].dwPortID = i;
//				m_Usbdev[m_nDevConn].szDesc = new char[100];
//				m_Usbdev[m_nDevConn].szDesc = (LPTSTR)(LPCTSTR)szDesc;
				memcpy(m_Usbdev[m_nDevConn].szDesc, (LPCTSTR)szDesc, szDesc.GetLength());
				m_Usbdev[m_nDevConn].speed = 0;
				m_Usbdev[m_nDevConn].bIsStorageDevice = szDesc == "USB Mass Storage Device";
				m_Usbdev[m_nDevConn].bcdUSB = pinfo->DeviceDescriptor.bcdUSB;
				OnAddNewDevice((WPARAM)&m_Usbdev[m_nDevConn], (LPARAM)m_Usbdev[m_nDevConn].szDesc);
			//	SendMessage(m_hWnd, WM_ADD_USB_DEVICE, 
			//	(WPARAM)&m_Usbdev[m_nDevConn], (LPARAM)m_Usbdev[m_nDevConn].szDesc);
					
			}
		}
	}

	HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, pinfo);
	pinfo = NULL;
}

CString CUsbIdentify::GetDeviceDesc(HANDLE hRtHub, int nIndex)
{
	USB_NODE_CONNECTION_DRIVERKEY_NAME			drvName		= {0};
	PUSB_NODE_CONNECTION_DRIVERKEY_NAME			p_drvName	= NULL;
	ULONG										len			= sizeof(USB_NODE_CONNECTION_DRIVERKEY_NAME);
	BOOL										success		= FALSE;
	DWORD										dwBytes		= 0;
	CString										szDrvName	= "";
	CString										szDevDesc	= "";

	drvName.ConnectionIndex = nIndex;

	success = ::DeviceIoControl(hRtHub,
								IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
								&drvName,
								len,
								&drvName,
								len,
								&dwBytes,
								NULL);
	if (success)
	{
		dwBytes = drvName.ActualLength;
		p_drvName = (PUSB_NODE_CONNECTION_DRIVERKEY_NAME)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytes);
		p_drvName->ConnectionIndex = nIndex;

		success = ::DeviceIoControl(hRtHub,
									IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
									p_drvName,
									len,
									p_drvName,
									dwBytes,
									&dwBytes,
									NULL);
		
		if (success)
		{
			szDrvName = WideToChar(p_drvName->DriverKeyName);
			printf("DrvName=%s\r\n",szDrvName);
		}
		
		HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, p_drvName);
		p_drvName = NULL;

	}
	
	if (szDrvName != "")
	{
		szDevDesc = DriverNameToDeviceDesc(szDrvName);
	}
	
	return szDevDesc;
}

CString CUsbIdentify::DriverNameToDeviceDesc(CString szDrvName)
{
	DEVINST				devInst		= 0;
	DEVINST				devNextInst	= 0;
	CONFIGRET			cr			= 0;
	BOOL				done		= FALSE;

	CString 			szDesc		= "";
	char				buff[512]   = {0};
	DWORD				len			= sizeof(buff);


	cr = CM_Locate_DevNode(&devInst, NULL, 0);
	if (cr != CR_SUCCESS)
		return "";
	
	while (!done)
	{
		memset(buff, 0, len);
		cr = CM_Get_DevNode_Registry_Property(devInst,
											  CM_DRP_DRIVER,
											  NULL,
											  buff,
											  &len,
											  0);

		if (cr == CR_SUCCESS && (CString)buff == szDrvName)
		{
			memset(buff, 0, len);

			cr = CM_Get_DevNode_Registry_Property(devInst,
												  CM_DRP_DRIVER,
												  NULL,
												  buff,
												  &len,
												  0);
			if (cr == CR_SUCCESS)
			{
				printf("CM_DRP_LOCATION_INFORMATION is %s\r\n",buff);
				return (CString)buff;
			}
			else
			{
				return "";
			}
		}

		cr = CM_Get_Child(&devNextInst, devInst, 0);
		if (cr == CR_SUCCESS)
		{
			devInst = devNextInst;
			continue;
		}

		while (1)
		{
			cr = CM_Get_Sibling(&devNextInst, devInst, 0);
			if (cr == CR_SUCCESS)
			{
				devInst = devNextInst;
				break;
			}

			cr = CM_Get_Parent(&devNextInst, devInst, 0);
			if (cr == CR_SUCCESS)
			{
				devInst = devNextInst;
			}
			else
			{
				done = TRUE;
				break;
			}
		}
	}
	return "";
}

CString CUsbIdentify::WideToChar(WCHAR *wBuff)
{
	char buff[512] = {0};
	::WideCharToMultiByte(CP_ACP, 0, wBuff, -1, buff, 512, NULL, NULL);
	return (CString)buff;
}

int CUsbIdentify::GetNumOfDeviceConnected()
{
	return m_nDevConn;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天色图综合网| 欧美在线999| 91蝌蚪porny九色| 欧美成人激情免费网| 亚洲欧美日韩国产另类专区| 另类小说欧美激情| 91国偷自产一区二区三区成为亚洲经典 | 欧美tickling网站挠脚心| 中文字幕一区二区三区不卡在线 | 亚洲精品美腿丝袜| 国产一区二区三区在线看麻豆| 欧美系列日韩一区| 日韩美女视频一区二区| 国产成人精品免费看| 日韩一区二区精品葵司在线| 亚洲最新视频在线观看| 成人禁用看黄a在线| 国产日产欧美一区| 国产专区综合网| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲高清不卡在线| 色天使久久综合网天天| 国产精品久久久久久亚洲毛片| 精东粉嫩av免费一区二区三区| 7777精品伊人久久久大香线蕉超级流畅| 国产精品成人在线观看| av日韩在线网站| 中文字幕av不卡| 高清免费成人av| 国产精品午夜春色av| 粉嫩在线一区二区三区视频| 国产亚洲va综合人人澡精品| 韩国女主播一区| 久久久91精品国产一区二区精品 | 国产不卡视频在线观看| 久久久综合网站| 国产麻豆成人精品| 久久只精品国产| 高清在线成人网| 亚洲人精品一区| 欧美精品乱人伦久久久久久| 日韩电影一区二区三区四区| 日韩一区二区三区在线观看| 玖玖九九国产精品| 久久精品人人做| 色综合天天综合色综合av| 夜夜嗨av一区二区三区中文字幕 | 懂色一区二区三区免费观看| 欧美国产成人精品| 一本色道久久综合亚洲精品按摩| 亚洲欧美另类小说视频| 欧美片网站yy| 国产在线一区观看| 国产精品久久久久毛片软件| 在线观看亚洲成人| 蜜臀av一区二区| 国产精品丝袜在线| 欧美视频在线一区| 精品一区二区三区在线播放视频 | 51精品视频一区二区三区| 蜜桃视频一区二区三区| 中文av一区特黄| 欧美二区乱c少妇| 国产另类ts人妖一区二区| 亚洲免费av观看| 欧美一区二区三区不卡| 成人高清视频在线| 日韩电影一区二区三区四区| 国产午夜精品久久| 欧美日韩电影一区| 国产成人超碰人人澡人人澡| 亚洲国产一区视频| 久久精品欧美一区二区三区不卡| 欧美在线一区二区| 国产一区二区按摩在线观看| 亚洲一区二区三区小说| 久久久久99精品国产片| 欧美亚洲自拍偷拍| 成人一区在线看| 久久精品国产网站| 亚洲已满18点击进入久久| 久久精品视频免费观看| 制服视频三区第一页精品| 99在线精品免费| 国产在线精品视频| 日韩avvvv在线播放| 亚洲欧美另类久久久精品| 久久青草国产手机看片福利盒子| 欧美亚洲图片小说| www.在线欧美| 国产成人一级电影| 久久福利视频一区二区| 图片区日韩欧美亚洲| 亚洲女子a中天字幕| 日本一区二区三区四区在线视频 | 美女在线视频一区| 亚洲午夜日本在线观看| 亚洲手机成人高清视频| 久久久国产精品不卡| 日韩欧美成人激情| 欧美一区国产二区| 欧美日本韩国一区| 欧美三级韩国三级日本一级| 一本久道中文字幕精品亚洲嫩 | 麻豆免费精品视频| 日韩国产成人精品| 热久久免费视频| 天天爽夜夜爽夜夜爽精品视频| 亚洲一区二区三区四区在线观看| **性色生活片久久毛片| 成人免费一区二区三区在线观看| 中国av一区二区三区| 久久精品视频免费| 国产精品每日更新在线播放网址| 久久九九久久九九| 久久午夜羞羞影院免费观看| 久久夜色精品一区| 久久久精品免费观看| 久久久精品人体av艺术| 中文成人综合网| 自拍av一区二区三区| 亚洲综合男人的天堂| 亚洲成av人影院在线观看网| 亚洲高清三级视频| 美日韩一区二区三区| 国产乱码精品一区二区三区忘忧草 | 亚洲欧美日韩国产另类专区 | 国产精品天天看| 国产精品久久久久久户外露出 | gogo大胆日本视频一区| 91亚洲精品久久久蜜桃| 欧美丝袜自拍制服另类| 欧美日韩一区二区三区免费看| 在线成人av网站| 2024国产精品| 亚洲欧美另类久久久精品2019| 亚洲国产精品久久不卡毛片| 日本视频一区二区| 国产夫妻精品视频| 91在线丨porny丨国产| 欧美日韩午夜影院| 精品国产91乱码一区二区三区 | 不卡av免费在线观看| 欧美影院一区二区三区| 欧美日韩视频在线第一区| 日韩一区二区三区高清免费看看| 精品国产一区二区三区四区四 | 亚洲乱码中文字幕| 三级久久三级久久久| 国产成人日日夜夜| 欧美伊人精品成人久久综合97| 欧美电影免费观看高清完整版在 | 亚洲欧美一区二区视频| 午夜久久久影院| 高清在线观看日韩| 91麻豆精品国产| 中文字幕中文字幕一区二区| 亚洲国产精品一区二区久久| 国内久久精品视频| 欧美日韩在线三区| 国产欧美精品一区| 日本欧美大码aⅴ在线播放| 成人看片黄a免费看在线| 欧美肥妇毛茸茸| 亚洲精品乱码久久久久| 国产盗摄视频一区二区三区| 欧美久久久久久蜜桃| 亚洲欧美视频在线观看| 国产真实乱子伦精品视频| 在线观看亚洲精品视频| 久久久亚洲午夜电影| 蜜臀va亚洲va欧美va天堂| 色偷偷久久人人79超碰人人澡| www久久精品| 五月综合激情婷婷六月色窝| 不卡大黄网站免费看| 26uuu国产在线精品一区二区| 午夜私人影院久久久久| 91麻豆精品在线观看| 久久精品一区八戒影视| 久久精工是国产品牌吗| 欧美日韩极品在线观看一区| 亚洲品质自拍视频网站| 成人爱爱电影网址| 久久久精品人体av艺术| 国产在线精品免费| 久久先锋影音av鲁色资源网| 久久丁香综合五月国产三级网站| 欧美日高清视频| 亚洲国产精品人人做人人爽| 在线观看视频一区| 亚洲激情自拍偷拍| 一本一本大道香蕉久在线精品| 国产精品久久三| 风流少妇一区二区| 国产精品色一区二区三区| 成人综合婷婷国产精品久久 | 7777精品伊人久久久大香线蕉超级流畅 | 99麻豆久久久国产精品免费 | 亚洲精品一区在线观看|