300x250
For Windows - C based #include <cfgmgr32.h> extern "C" { #include<hidsdi.h> } #pragma comment (lib, "hid.lib") #pragma comment (lib, "Cfgmgr32.lib") // These are the default device attributes set in the driver which are used to identify the device. // 찾으려고 하는 장치의 vendor id와 product id #define HIDMINI_DEFAULT_PID 0x5678 #define HIDMINI_DEFAULT_VID 0x1234 int main() { GUID hidguid; HANDLE file = INVALID_HANDLE_VALUE; CONFIGRET cr = CR_SUCCESS; PWSTR deviceInterfaceList = NULL; ULONG deviceInterfaceListLength = 0; PWSTR currentInterface; BOOLEAN bRet = FALSE; HANDLE devHandle = INVALID_HANDLE_VALUE; PHIDP_PREPARSED_DATA Ppd; // The opaque parser info describing this device HIDP_CAPS Caps; // The Capabilities of this hid device. HIDD_ATTRIBUTES attr; // Device attributes LPBYTE buffer = NULL; // The HidD_GetHidGuid routine returns the device interfaceGUID for HIDClass devices. HidD_GetHidGuid(&hidguid); cr = CM_Get_Device_Interface_List_Size( &deviceInterfaceListLength, InterfaceGuid, NULL, CM_GET_DEVICE_INTERFACE_LIST_PRESENT); if (cr != CR_SUCCESS) return 0; if (deviceInterfaceListLength <= 1) return 0; deviceInterfaceList = (PWSTR)malloc(deviceInterfaceListLength * sizeof(WCHAR)); if (deviceInterfaceList == NULL) return 0; cr = CM_Get_Device_Interface_ListW( InterfaceGuid, NULL, deviceInterfaceList, deviceInterfaceListLength, CM_GET_DEVICE_INTERFACE_LIST_PRESENT); if (cr != CR_SUCCESS) { free(deviceInterfaceList); return 0; } for (currentInterface = deviceInterfaceList; *currentInterface; currentInterface += wcslen(currentInterface) + 1) { devHandle = CreateFileW(currentInterface, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, // no SECURITY_ATTRIBUTES structure OPEN_EXISTING, // No special create flags 0, // No special attributes NULL); // No template file if (INVALID_HANDLE_VALUE == devHandle) continue; if (!HidD_GetAttributes(devHandle, &attr)) continue; if ((attr.VendorID != HIDMINI_DEFAULT_VID) || (attr.ProductID != HIDMINI_DEFAULT_PID)) continue; if (!HidD_GetPreparsedData (file, &Ppd)) continue; if (!HidP_GetCaps (Ppd, &Caps)) { HidD_FreePreparsedData (Ppd); continue; } // found my device // allocate buffer & fill the buffer // WriteFile CloseHandle(devHandle); break; free(deviceInterfaceList); } |
300x250
'All about Programming' 카테고리의 다른 글
구글 검색 방법 / command(커맨드) / 검색 식 #1 (0) | 2020.12.05 |
---|---|
Linux python hid usb find/open/write (0) | 2020.10.06 |
Windbg 설정 (0) | 2019.07.15 |
Windows Class Filter Driver 설치 방법 (0) | 2019.07.12 |
System Reboot (시스템 재부팅) From Device Driver (0) | 2019.06.26 |