Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sstream>
- #include <string>
- #include <Windows.h>
- #include <hidsdi.h>
- #include <setupapi.h>
- #include <cfgmgr32.h>
- static unsigned char Black_1[] =
- {
- 0x00, 0x7F, 0x01, 0x3C, 0x00, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77
- };
- static unsigned char Black_2[] =
- {
- 0x00, 0x7F, 0x02, 0x3C, 0x00, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77
- };
- static unsigned char Black_3[] =
- {
- 0x00, 0x7F, 0x03, 0x3C, 0x00, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77
- };
- static unsigned char Black_4[] =
- {
- 0x00, 0x7F, 0x04, 0x24, 0x00, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00
- };
- static unsigned char Flush_1[] =
- {
- 0x00, 0x07, 0x27, 0x00, 0x00, 0xD8, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00
- };
- bool IsMatchingDevice(wchar_t *pDeviceID, unsigned int uiVID, unsigned int uiPID, unsigned int uiMI)
- {
- unsigned int uiLocalVID = 0, uiLocalPID = 0, uiLocalMI = 0;
- LPWSTR pszNextToken = 0;
- LPWSTR pszToken = wcstok_s(pDeviceID, L"\\#&", &pszNextToken);
- while (pszToken)
- {
- std::wstring tokenStr(pszToken);
- if (tokenStr.find(L"VID_", 0, 4) != std::wstring::npos)
- {
- std::wistringstream iss(tokenStr.substr(4));
- iss >> std::hex >> uiLocalVID;
- }
- else if (tokenStr.find(L"PID_", 0, 4) != std::wstring::npos)
- {
- std::wistringstream iss(tokenStr.substr(4));
- iss >> std::hex >> uiLocalPID;
- }
- else if (tokenStr.find(L"MI_", 0, 3) != std::wstring::npos)
- {
- std::wistringstream iss(tokenStr.substr(3));
- iss >> std::hex >> uiLocalMI;
- }
- pszToken = wcstok_s(0, L"\\#&", &pszNextToken);
- }
- if (uiVID != uiLocalVID || uiPID != uiLocalPID || uiMI != uiLocalMI)
- return false;
- return true;
- }
- HANDLE GetDeviceHandle(unsigned int uiVID, unsigned int uiPID, unsigned int uiMI)
- {
- const GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 };
- HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_HID, 0, 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
- if (hDevInfo == INVALID_HANDLE_VALUE)
- return 0;
- HANDLE hReturn = 0;
- SP_DEVINFO_DATA deviceData = { 0 };
- deviceData.cbSize = sizeof(SP_DEVINFO_DATA);
- for (unsigned int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &deviceData); ++i)
- {
- wchar_t wszDeviceID[MAX_DEVICE_ID_LEN];
- if (CM_Get_Device_ID(deviceData.DevInst, wszDeviceID, MAX_DEVICE_ID_LEN, 0))
- continue;
- if (!IsMatchingDevice(wszDeviceID, uiVID, uiPID, uiMI))
- continue;
- SP_INTERFACE_DEVICE_DATA interfaceData = { 0 };
- interfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);
- if (!SetupDiEnumDeviceInterfaces(hDevInfo, &deviceData, &GUID_DEVINTERFACE_HID, 0, &interfaceData))
- break;
- DWORD dwRequiredSize = 0;
- SetupDiGetDeviceInterfaceDetail(hDevInfo, &interfaceData, 0, 0, &dwRequiredSize, 0);
- SP_INTERFACE_DEVICE_DETAIL_DATA *pData = (SP_INTERFACE_DEVICE_DETAIL_DATA *)new unsigned char[dwRequiredSize];
- pData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
- if (!SetupDiGetDeviceInterfaceDetail(hDevInfo, &interfaceData, pData, dwRequiredSize, 0, 0))
- {
- delete pData;
- break;
- }
- HANDLE hDevice = CreateFile(pData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
- if (hDevice == INVALID_HANDLE_VALUE)
- {
- delete pData;
- break;
- }
- hReturn = hDevice;
- break;
- }
- SetupDiDestroyDeviceInfoList(hDevInfo);
- return hReturn;
- }
- int main(void)
- {
- HANDLE hDevice = GetDeviceHandle(0x1B1C, 0x1B13, 0x3);
- if (!hDevice)
- return 1;
- for (unsigned int i = 0; i < 60; ++i)
- {
- Black_2[i + 5] = 0x07;
- HidD_SetFeature(hDevice, Black_1, sizeof(Black_1));
- HidD_SetFeature(hDevice, Black_2, sizeof(Black_2));
- HidD_SetFeature(hDevice, Black_3, sizeof(Black_3));
- HidD_SetFeature(hDevice, Black_4, sizeof(Black_4));
- HidD_SetFeature(hDevice, Flush_1, sizeof(Flush_1));
- printf("Changed byte %i, key 1.\n", i);
- Sleep(200);
- Black_2[i + 5] = 0x70;
- HidD_SetFeature(hDevice, Black_1, sizeof(Black_1));
- HidD_SetFeature(hDevice, Black_2, sizeof(Black_2));
- HidD_SetFeature(hDevice, Black_3, sizeof(Black_3));
- HidD_SetFeature(hDevice, Black_4, sizeof(Black_4));
- HidD_SetFeature(hDevice, Flush_1, sizeof(Flush_1));
- printf("Changed byte %i, key 2.\n", i);
- Sleep(200);
- Black_2[i + 5] = 0x77;
- }
- CloseHandle(hDevice);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement