#include "stdafx.h" #include <iostream> #include <Windows.h> #include <iomanip> #include <fstream> #include <cstdlib> #include <string> #include <mutex> #include <atlbase.h> #include <atlconv.h> #include <SetupAPI.h>
extern "C"{ #include <hidsdi.h> }
#pragma comment(lib,"hid.lib") #pragma comment(lib,"Setupapi.lib")
using namespace std;
void EnumHIDDevice() { GUID HidGuid; HidD_GetHidGuid(&HidGuid); HDEVINFO hdev = SetupDiGetClassDevs( &HidGuid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT );if(hdev == INVALID_HANDLE_VALUE){cout << "SetupDiGetClassDevs failed : " << GetLastError() << endl;}
int idev = 0; while(TRUE){ SP_DEVICE_INTERFACE_DATA did = {0}; did.cbSize = sizeof(did); if(!SetupDiEnumDeviceInterfaces( hdev, NULL, &HidGuid, idev, &did )){cout << "SetupDiEnumDeviceInterfaces failed : " << GetLastError() << endl;break;}
DWORD buf_didd = 256; PSP_DEVICE_INTERFACE_DETAIL_DATA pdidd = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LPTR,buf_didd); pdidd->cbSize = sizeof(*pdidd); if(!SetupDiGetDeviceInterfaceDetail( hdev, &did, pdidd, buf_didd, NULL, NULL )){cout << "SetupDiGetDeviceInterfaceDetail failed : " << GetLastError() << endl;} cout << "pdidd->DevicePath = " << pdidd->DevicePath << endl;
HANDLE hDevHandle = CreateFile( pdidd->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );if(INVALID_HANDLE_VALUE == hDevHandle){cout << "CreateFile failed : " << GetLastError() << endl;} HIDD_ATTRIBUTES hidAttributes = {0}; hidAttributes.Size = sizeof(hidAttributes); if (!HidD_GetAttributes( hDevHandle, &hidAttributes )){cout << "HidD_GetAttributes failed : " << GetLastError() << endl;} cout << "hidAttributes.ProductID = " << hidAttributes.ProductID << endl; cout << "hidAttributes.VendorID = " << hidAttributes.VendorID << endl; if(hidAttributes.ProductID == 8762 && hidAttributes.VendorID == 3689){ cout << "发现域之天加密狗" << endl; }
CloseHandle(hDevHandle); LocalFree(pdidd);
idev++; cout << endl; }
SetupDiDestroyDeviceInfoList(hdev); }
int _tmain(int argc, _TCHAR* argv[]) { EnumHIDDevice();
getchar(); return 0; }
|