阅读:1713回复:1
HID哪个函数能够获得HID设备的Vendor ID 和Product ID??
HID哪个函数能够获得HID设备的Vendor ID 和Product ID?
|
|
最新喜欢:![]() |
沙发#
发布于:2005-01-11 16:37
你先用这些函数:
VOID FindUSBDevice(DWORD dwVendor,DWORD dwProduct, DWORD dwUsage,DWORD dwUsagePage,DWORD dwReportLen) { GUID hidGuid; HDEVINFO hDeviceInfo = INVALID_HANDLE_VALUE; SP_DEVICE_INTERFACE_DATA deviceInterfaceData; UINT currentHidDevice; ULONG deviceInterfaceDetailLength; HANDLE hHidDevice = INVALID_HANDLE_VALUE; PSP_INTERFACE_DEVICE_DETAIL_DATA pDeviceInterfaceDetail; pDeviceInterfaceDetail = NULL; HidD_GetHidGuid (&hidGuid); hDeviceInfo = SetupDiGetClassDevs ( &hidGuid,NULL,NULL, (DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); if (hDeviceInfo == INVALID_HANDLE_VALUE) return ; deviceInterfaceData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA); currentHidDevice = 0; while (SetupDiEnumDeviceInterfaces (hDeviceInfo, 0, &hidGuid,currentHidDevice,&deviceInterfaceData)) { hHidDevice = INVALID_HANDLE_VALUE; SetupDiGetDeviceInterfaceDetail (hDeviceInfo, &deviceInterfaceData, NULL, 0, &deviceInterfaceDetailLength, NULL); pDeviceInterfaceDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)GlobalAlloc(GPTR,deviceInterfaceDetailLength); if (pDeviceInterfaceDetail != NULL) { (pDeviceInterfaceDetail)->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA); if (SetupDiGetDeviceInterfaceDetail (hDeviceInfo, &deviceInterfaceData, pDeviceInterfaceDetail,deviceInterfaceDetailLength, &deviceInterfaceDetailLength, NULL)) { CheckUsbDevice(dwVendor,dwProduct,dwUsage,dwUsagePage, dwReportLen,pDeviceInterfaceDetail->DevicePath, TRUE); }//SetupDiGetDeviceInterfaceDetail GlobalFree (pDeviceInterfaceDetail); }//pDeviceInterfaceDetail!=NULL pDeviceInterfaceDetail = NULL; currentHidDevice++; } //while SetupDiDestroyDeviceInfoList (hDeviceInfo); } BOOL CheckUsbDevice(DWORD dwVendor,DWORD dwProduct, DWORD dwUsage,DWORD dwUsagePage,DWORD dwReportLen, LPTSTR pDeviceName, BOOL bBuildDevice) { BOOL bRet = FALSE, bDeviceState = FALSE; HANDLE hDevice; HIDD_ATTRIBUTES hidDeviceAttributes; HIDP_CAPS hidCaps; PHIDP_PREPARSED_DATA pPreparsedData; BOOL bClose; LPUSBDEVICEKBD lpKBD,lpKeyboardLink; DebugOutput(("Check Device %s ",pDeviceName)); if(g_lpUsbDeviceInfo != NULL ) { lpKeyboardLink = g_lpUsbDeviceInfo; while(lpKeyboardLink != NULL) { if (strcmpi(lpKeyboardLink->szDeviceName,pDeviceName) == 0) { DebugOutput(("The Device was hooked")); return FALSE; } lpKeyboardLink = (LPUSBDEVICEKBD)lpKeyboardLink->lpNext; } } hDevice = CreateFile (pDeviceName, GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); if (hDevice != INVALID_HANDLE_VALUE) { bClose = TRUE; if (HidD_GetAttributes (hDevice, &hidDeviceAttributes)) { if ((hidDeviceAttributes.VendorID == dwVendor) && (hidDeviceAttributes.ProductID == dwProduct)) { }//verdorID,productID } //HidD_GetAttributtes if(bClose) CloseHandle (hDevice); }//hHidDevice!=INVALID_HANDLE_VALUE return bRet; } 也就是在HidD_GetAttributes函数得到的属性中包含PID和VID |
|