Advertisement
Guest User

Untitled

a guest
Oct 8th, 2014
1,215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.94 KB | None | 0 0
  1. #include <sstream>
  2. #include <string>
  3. #include <Windows.h>
  4. #include <hidsdi.h>
  5. #include <setupapi.h>
  6. #include <cfgmgr32.h>
  7.  
  8. static unsigned char Black_1[] =
  9. {
  10. 0x00, 0x7F, 0x01, 0x3C, 0x00, 0x77, 0x77, 0x77,
  11. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  12. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  13. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  14. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  15. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  16. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  17. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  18. 0x77
  19. };
  20.  
  21. static unsigned char Black_2[] =
  22. {
  23. 0x00, 0x7F, 0x02, 0x3C, 0x00, 0x77, 0x77, 0x77,
  24. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  25. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  26. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  27. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  28. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  29. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  30. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  31. 0x77
  32. };
  33.  
  34. static unsigned char Black_3[] =
  35. {
  36. 0x00, 0x7F, 0x03, 0x3C, 0x00, 0x77, 0x77, 0x77,
  37. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  38. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  39. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  40. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  41. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  42. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  43. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  44. 0x77
  45. };
  46.  
  47. static unsigned char Black_4[] =
  48. {
  49. 0x00, 0x7F, 0x04, 0x24, 0x00, 0x77, 0x77, 0x77,
  50. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  51. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  52. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  53. 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
  54. 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  55. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  56. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  57. 0x00
  58. };
  59.  
  60. static unsigned char Flush_1[] =
  61. {
  62. 0x00, 0x07, 0x27, 0x00, 0x00, 0xD8, 0x00, 0x00,
  63. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  64. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  65. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  66. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  67. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  68. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  69. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  70. 0x00
  71. };
  72.  
  73. bool IsMatchingDevice(wchar_t *pDeviceID, unsigned int uiVID, unsigned int uiPID, unsigned int uiMI)
  74. {
  75. unsigned int uiLocalVID = 0, uiLocalPID = 0, uiLocalMI = 0;
  76.  
  77. LPWSTR pszNextToken = 0;
  78. LPWSTR pszToken = wcstok_s(pDeviceID, L"\\#&", &pszNextToken);
  79. while (pszToken)
  80. {
  81. std::wstring tokenStr(pszToken);
  82. if (tokenStr.find(L"VID_", 0, 4) != std::wstring::npos)
  83. {
  84. std::wistringstream iss(tokenStr.substr(4));
  85. iss >> std::hex >> uiLocalVID;
  86. }
  87. else if (tokenStr.find(L"PID_", 0, 4) != std::wstring::npos)
  88. {
  89. std::wistringstream iss(tokenStr.substr(4));
  90. iss >> std::hex >> uiLocalPID;
  91. }
  92. else if (tokenStr.find(L"MI_", 0, 3) != std::wstring::npos)
  93. {
  94. std::wistringstream iss(tokenStr.substr(3));
  95. iss >> std::hex >> uiLocalMI;
  96. }
  97.  
  98. pszToken = wcstok_s(0, L"\\#&", &pszNextToken);
  99. }
  100.  
  101. if (uiVID != uiLocalVID || uiPID != uiLocalPID || uiMI != uiLocalMI)
  102. return false;
  103.  
  104. return true;
  105. }
  106.  
  107. HANDLE GetDeviceHandle(unsigned int uiVID, unsigned int uiPID, unsigned int uiMI)
  108. {
  109. const GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 };
  110. HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_HID, 0, 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
  111. if (hDevInfo == INVALID_HANDLE_VALUE)
  112. return 0;
  113.  
  114. HANDLE hReturn = 0;
  115.  
  116. SP_DEVINFO_DATA deviceData = { 0 };
  117. deviceData.cbSize = sizeof(SP_DEVINFO_DATA);
  118.  
  119. for (unsigned int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &deviceData); ++i)
  120. {
  121. wchar_t wszDeviceID[MAX_DEVICE_ID_LEN];
  122. if (CM_Get_Device_ID(deviceData.DevInst, wszDeviceID, MAX_DEVICE_ID_LEN, 0))
  123. continue;
  124.  
  125. if (!IsMatchingDevice(wszDeviceID, uiVID, uiPID, uiMI))
  126. continue;
  127.  
  128. SP_INTERFACE_DEVICE_DATA interfaceData = { 0 };
  129. interfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);
  130.  
  131. if (!SetupDiEnumDeviceInterfaces(hDevInfo, &deviceData, &GUID_DEVINTERFACE_HID, 0, &interfaceData))
  132. break;
  133.  
  134. DWORD dwRequiredSize = 0;
  135. SetupDiGetDeviceInterfaceDetail(hDevInfo, &interfaceData, 0, 0, &dwRequiredSize, 0);
  136.  
  137. SP_INTERFACE_DEVICE_DETAIL_DATA *pData = (SP_INTERFACE_DEVICE_DETAIL_DATA *)new unsigned char[dwRequiredSize];
  138. pData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
  139.  
  140. if (!SetupDiGetDeviceInterfaceDetail(hDevInfo, &interfaceData, pData, dwRequiredSize, 0, 0))
  141. {
  142. delete pData;
  143. break;
  144. }
  145.  
  146. HANDLE hDevice = CreateFile(pData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
  147. if (hDevice == INVALID_HANDLE_VALUE)
  148. {
  149. delete pData;
  150. break;
  151. }
  152.  
  153. hReturn = hDevice;
  154. break;
  155. }
  156.  
  157. SetupDiDestroyDeviceInfoList(hDevInfo);
  158.  
  159. return hReturn;
  160. }
  161.  
  162. int main(void)
  163. {
  164. HANDLE hDevice = GetDeviceHandle(0x1B1C, 0x1B13, 0x3);
  165. if (!hDevice)
  166. return 1;
  167.  
  168. for (unsigned int i = 0; i < 60; ++i)
  169. {
  170. Black_2[i + 5] = 0x07;
  171.  
  172. HidD_SetFeature(hDevice, Black_1, sizeof(Black_1));
  173. HidD_SetFeature(hDevice, Black_2, sizeof(Black_2));
  174. HidD_SetFeature(hDevice, Black_3, sizeof(Black_3));
  175. HidD_SetFeature(hDevice, Black_4, sizeof(Black_4));
  176. HidD_SetFeature(hDevice, Flush_1, sizeof(Flush_1));
  177.  
  178. printf("Changed byte %i, key 1.\n", i);
  179.  
  180. Sleep(200);
  181.  
  182. Black_2[i + 5] = 0x70;
  183.  
  184. HidD_SetFeature(hDevice, Black_1, sizeof(Black_1));
  185. HidD_SetFeature(hDevice, Black_2, sizeof(Black_2));
  186. HidD_SetFeature(hDevice, Black_3, sizeof(Black_3));
  187. HidD_SetFeature(hDevice, Black_4, sizeof(Black_4));
  188. HidD_SetFeature(hDevice, Flush_1, sizeof(Flush_1));
  189.  
  190. printf("Changed byte %i, key 2.\n", i);
  191.  
  192. Sleep(200);
  193.  
  194. Black_2[i + 5] = 0x77;
  195. }
  196.  
  197. CloseHandle(hDevice);
  198.  
  199. return 0;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement