Guest User

Untitled

a guest
May 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.35 KB | None | 0 0
  1. static int count = 0;
  2. DECLSPEC_HOTPATCH NTSTATUS HidP_GetValueCaps (HIDP_REPORT_TYPE ReportType, PHIDP_VALUE_CAPS ValueCaps,
  3. PULONG ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData)
  4. {
  5. TRACE("Usage (%x, %x, %d, %x)\n", ReportType, ValueCaps, *ValueCapsLength, PreparsedData);
  6. /*
  7. USAGE UsagePage;
  8. UCHAR ReportID;
  9. BOOLEAN IsAlias;
  10. USHORT BitField;
  11. USHORT LinkCollection;
  12. USAGE LinkUsage;
  13. USAGE LinkUsagePage;
  14. BOOLEAN IsRange;
  15. BOOLEAN IsStringRange;
  16. BOOLEAN IsDesignatorRange;
  17. BOOLEAN IsAbsolute;
  18. BOOLEAN HasNull;
  19. UCHAR Reserved;
  20. USHORT BitSize;
  21. USHORT ReportCount;
  22. USHORT Reserved2[5];
  23. ULONG UnitsExp;
  24. ULONG Units;
  25. LONG LogicalMin, LogicalMax;
  26. LONG PhysicalMin, PhysicalMax;
  27. union {
  28. struct {
  29. USAGE UsageMin, UsageMax;
  30. USHORT StringMin, StringMax;
  31. USHORT DesignatorMin, DesignatorMax;
  32. USHORT DataIndexMin, DataIndexMax;
  33. } Range;
  34. struct {
  35. USAGE Usage, Reserved1;
  36. USHORT StringIndex, Reserved2;
  37. USHORT DesignatorIndex, Reserved3;
  38. USHORT DataIndex, Reserved4;
  39. } NotRange;
  40. } DUMMYUNIONNAME;
  41. * */
  42. if (ReportType == 0) {
  43. count ++;
  44. /*
  45. 0xa1,0xff,
  46. 0x00,
  47. 0x00,
  48. 0x02,0x00,
  49. 0x01,0x00,
  50. 0x02,0x00,
  51. 0xa0,0xff,
  52. 0x00,
  53. 0x00,
  54. 0x00,
  55. 0x01,
  56. 0x00,
  57. 0x00,
  58. 0x08,0x00,
  59. 0x07,0x00,
  60.  
  61. 0x00,0x00,
  62. 0x00,0x00,
  63. 0x00,0x00,
  64. 0x38,0x01,
  65. 0x00,0x00,
  66.  
  67. 0x00,0x00,0x00,0x00,
  68. 0x00,0x00,0x00,0x00,
  69.  
  70. 0x80,0xff,0xff,0xff,
  71. 0x7f,0x00,0x00,0x00,
  72. 0x00,0x00,0x00,0x00,
  73. 0xff,0xff,0xff,0xff,
  74. 0x04,0x00,
  75. 0x04,0x00,
  76. 0x00,0x00,
  77. 0x00,0x00,
  78. 0x00,0x00,
  79. 0x00,0x00,
  80. 0x00,0x00,
  81. 0x00,0x00,
  82. */
  83.  
  84. /*
  85. 0xa1,0xff,0x00,0x00,0x02,0x00,0x01,0x00,0x02,0
  86. x00,0xa0,0xff,0x00,0x00,0x00,0x01,0x00,0x00,0x08,0x00,0x07,0x00,
  87.  
  88. 0xc1,0x77,
  89. 0x50,0x1f,
  90. 0x3d,0x00,
  91. 0x24,0xe5,
  92. 0xc1,0x77,
  93.  
  94. 0x00,0x00,0x00,0x00,
  95. 0x00,0x00,0x00,0x00,
  96. 0x80,0xff,0xff,0xff,
  97. 0x7f,0x00,0x00,0x00,
  98. 0x00,0x00,0x00,0x00,
  99. 0xff,0xff,0xff,0xff,
  100. 0x04,0x00,
  101. 0x04,0x00,
  102. 0x00,0x00,
  103. 0x00,0x00,
  104. 0x00,0x00,
  105. 0x00,0x00,
  106. 0x00,0x00,
  107. 0x00,0x00,
  108.  
  109. */
  110.  
  111.  
  112. ValueCaps->UsagePage = 0xffa1;
  113. ValueCaps->ReportID = 0x0;
  114. ValueCaps->IsAlias = 0x0;
  115. ValueCaps->BitField = 0x2;
  116. ValueCaps->LinkCollection = 0x1;
  117. ValueCaps->LinkUsage = 0x2;
  118. ValueCaps->LinkUsagePage = 0xffa0;
  119. ValueCaps->IsRange = 0x0;
  120. ValueCaps->IsStringRange = 0x0;
  121. ValueCaps->IsDesignatorRange = 0x0;
  122. ValueCaps->IsAbsolute = 0x1;
  123. ValueCaps->HasNull = 0x0;
  124. ValueCaps->Reserved = 0x0;
  125. ValueCaps->BitSize = 0x8;
  126. ValueCaps->ReportCount = 0x7;
  127. if (count == 0) {
  128. ValueCaps->Reserved2[0] = 0x0;
  129. ValueCaps->Reserved2[1] = 0x0;
  130. ValueCaps->Reserved2[2] = 0x2000;
  131. ValueCaps->Reserved2[3] = 0x02;
  132. ValueCaps->Reserved2[4] = 0x0;
  133. } else {
  134. ValueCaps->Reserved2[0] = 0x77c1;
  135. ValueCaps->Reserved2[1] = 0x1f50;
  136. ValueCaps->Reserved2[2] = 0x3d;
  137. ValueCaps->Reserved2[3] = 0xe524;
  138. ValueCaps->Reserved2[4] = 0x77c1;
  139. }
  140.  
  141. ValueCaps->UnitsExp = 0x0;
  142. ValueCaps->Units = 0x0;
  143. ValueCaps->LogicalMin = 0xffffff80;
  144. ValueCaps->LogicalMax = 0x7f;
  145. ValueCaps->PhysicalMin = 0x0;
  146. ValueCaps->PhysicalMax = 0xffffffff;
  147. ValueCaps->Range.UsageMin = 0x4;
  148. ValueCaps->Range.UsageMax = 0x4;
  149. ValueCaps->Range.StringMin = 0x0;
  150. ValueCaps->Range.StringMax = 0x0;
  151. ValueCaps->Range.DesignatorMin = 0x0;
  152. ValueCaps->Range.DesignatorMax = 0x0;
  153. ValueCaps->Range.DataIndexMin = 0x0;
  154. ValueCaps->Range.DataIndexMax = 0x0;
  155.  
  156.  
  157. ValueCaps = (PHIDP_VALUE_CAPS) ((void *) ((char *) ValueCaps + 72));
  158. TRACE("(%x)\n",ValueCaps);
  159. /*
  160. 0xa1,0xff,
  161. 0x00,
  162. 0x00,
  163. 0x02, 0x00,
  164. 0x01,0x00,
  165. 0x02,0x00,
  166. 0xa0,0xff,
  167. 0x00,
  168. 0x00,
  169. 0x00,
  170. 0x01,
  171. 0x00,
  172. 0x24,
  173. 0x08,0x00,
  174. 0x01,0x00,
  175.  
  176. 0x00,0x00,
  177. 0xf0,0x24,
  178. 0x3d,0x00,
  179. 0xb8,0x24,
  180. 0x00,0x00,
  181.  
  182. 0x00,0x00,0x00,0x00,
  183. 0x00,0x00,0x00,0x00,
  184. 0x80,0xff,0xff,0xff,
  185. 0x7f,0x00,0x00,0x00,
  186. 0x00,0x00,0x00,0x00,
  187. 0xff,0xff,0xff,0xff,
  188. 0x03,0x00,
  189. 0x03,0x00,
  190. 0x00,0x00,
  191. 0x00,0x00,
  192. 0x00,0x00,
  193. 0x00,0x00,
  194. 0x01,0x00,
  195. 0x01,0x00};
  196. */
  197. /*
  198. 0xa1,0xff,0x00,0x00,0x02,0x00,0x01,0x00,0x02,0
  199. x00,0xa0,0xff,0x00,0x00,0x00,0x01,0x00,0x5c,0x08,0x00,0x01,0x00,
  200. 0xc0,0x77,
  201. 0xff,0xff,
  202. 0xff,0xff,
  203. 0xad,0x03,
  204. 0xc2,0x77,
  205. 0x00,0x00,0x00,0x00,
  206. 0x00,0x00,0x00,0x00,
  207. 0x80,0xff,0xff,0xff,
  208. 0x7f,0x00,0x00,0x00,
  209. 0x00,0x00,0x00,0x00,
  210. 0xff,0xff,0xff,0xff,
  211. 0x03,0x00,
  212. 0x03,0x00,
  213. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00
  214. */
  215.  
  216. ValueCaps->UsagePage = 0xffa1;
  217. ValueCaps->ReportID = 0x0;
  218. ValueCaps->IsAlias = 0x0;
  219. ValueCaps->BitField = 0x2;
  220. ValueCaps->LinkCollection = 0x1;
  221. ValueCaps->LinkUsage = 0x2;
  222. ValueCaps->LinkUsagePage = 0xffa0;
  223. ValueCaps->IsRange = 0x0;
  224. ValueCaps->IsStringRange = 0x0;
  225. ValueCaps->IsDesignatorRange = 0x0;
  226. ValueCaps->IsAbsolute = 0x1;
  227. ValueCaps->HasNull = 0x0;
  228. ValueCaps->Reserved = 0x4;
  229. ValueCaps->BitSize = 0x8;
  230. ValueCaps->ReportCount = 0x1;
  231. /*ValueCaps->Reserved2[0] = 0x0;
  232. ValueCaps->Reserved2[1] = 0x24f0;
  233. ValueCaps->Reserved2[2] = 0x3d;
  234. ValueCaps->Reserved2[3] = 0x24b8;
  235. ValueCaps->Reserved2[4] = 0x0;*/
  236. /* 0x3d,0x00,
  237. 0x28,0x00,
  238. 0x00,0x00,
  239. 0x00,0x00,
  240. 0x3d,0x00,*/
  241. if (count == 0) {
  242. ValueCaps->Reserved2[0] = 0x3d;
  243. ValueCaps->Reserved2[1] = 0x28;
  244. ValueCaps->Reserved2[2] = 0x0;
  245. ValueCaps->Reserved2[3] = 0x0;
  246. ValueCaps->Reserved2[4] = 0x3d;
  247. } else {
  248. ValueCaps->Reserved2[0] = 0x77c0;
  249. ValueCaps->Reserved2[1] = 0xffff;
  250. ValueCaps->Reserved2[2] = 0xffff;
  251. ValueCaps->Reserved2[3] = 0x03ad;
  252. ValueCaps->Reserved2[4] = 0x77c2;
  253. }
  254.  
  255. ValueCaps->UnitsExp = 0x0;
  256. ValueCaps->Units = 0x0;
  257. ValueCaps->LogicalMin = 0xffffff80;
  258. ValueCaps->LogicalMax = 0x7f;
  259. ValueCaps->PhysicalMin = 0x0;
  260. ValueCaps->PhysicalMax = 0xffffffff;
  261. ValueCaps->Range.UsageMin = 0x3;
  262. ValueCaps->Range.UsageMax = 0x3;
  263. ValueCaps->Range.StringMin = 0x0;
  264. ValueCaps->Range.StringMax = 0x0;
  265. ValueCaps->Range.DesignatorMin = 0x0;
  266. ValueCaps->Range.DesignatorMax = 0x0;
  267. ValueCaps->Range.DataIndexMin = 0x1;
  268. ValueCaps->Range.DataIndexMax = 0x1;
  269.  
  270.  
  271. *ValueCapsLength = 2;
  272. return 0x110000;
  273. } else if (ReportType == 1) {
  274. /*unsigned char r[] = {0xa1,0xff,0x00,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0xa0,0xff,0x00,
  275. 0x00,0x00,0x01,0x00,0x00,0x08,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,
  276. 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,
  277. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x06,0x00,0x06,0x00,0x00,
  278. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};*/
  279.  
  280. /*0xa1,0xff,
  281. 0x00,
  282. 0x00,
  283. 0x02,
  284. 0x00,
  285. 0x01,0x00,
  286. 0x02,0x00,
  287. 0xa0,0xff,0x00,0x00,0x00,0x01,0x00,
  288. 0x24,0x08,
  289. 0x00,0x01,
  290. 0x00,
  291. 0x00,0x00,0xf0,0x24,0x3d,0x00,0xb8,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  292. 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,
  293. 0xff,0xff,0xff,0x05,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
  294. 0x00,0x01,0x00};
  295.  
  296. unsigned char *p = (unsigned char *) ValueCaps;
  297.  
  298. int i;
  299. for (i = 0; i != sizeof (r); i ++) {
  300. p[i] = r[i];
  301. }*/
  302.  
  303. ValueCaps->UsagePage = 0xffa1;
  304. ValueCaps->ReportID = 0x0;
  305. ValueCaps->IsAlias = 0x0;
  306. ValueCaps->BitField = 0x2;
  307. ValueCaps->LinkCollection = 0x1;
  308. ValueCaps->LinkUsage = 0x2;
  309. ValueCaps->LinkUsagePage = 0xffa0;
  310. ValueCaps->IsRange = 0x0;
  311. ValueCaps->IsStringRange = 0x0;
  312. ValueCaps->IsDesignatorRange = 0x0;
  313. ValueCaps->IsAbsolute = 0x1;
  314. ValueCaps->HasNull = 0x0;
  315. ValueCaps->Reserved = 0x0;
  316. ValueCaps->BitSize = 0x8;
  317. ValueCaps->ReportCount = 0x7;
  318. /*ValueCaps->Reserved2[0] = 0x0;
  319. ValueCaps->Reserved2[1] = 0x0;
  320. ValueCaps->Reserved2[2] = 0x0;
  321. ValueCaps->Reserved2[3] = 0x138;
  322. ValueCaps->Reserved2[4] = 0x0;*/
  323. if (count == 0) {
  324. ValueCaps->Reserved2[0] = 0x0;
  325. ValueCaps->Reserved2[1] = 0x0;
  326. ValueCaps->Reserved2[2] = 0x2000;
  327. ValueCaps->Reserved2[3] = 0x02;
  328. ValueCaps->Reserved2[4] = 0x0;
  329. } else {
  330. ValueCaps->Reserved2[0] = 0x77c1;
  331. ValueCaps->Reserved2[1] = 0x1f50;
  332. ValueCaps->Reserved2[2] = 0x3d;
  333. ValueCaps->Reserved2[3] = 0xe524;
  334. ValueCaps->Reserved2[4] = 0x77c1;
  335. }
  336. /*
  337. 0x3d,0x00,
  338. 0x28,0x00,
  339. 0x00,0x00,
  340. 0x00,0x00,
  341. 0x3d,0x00,
  342. * */
  343. ValueCaps->UnitsExp = 0x0;
  344. ValueCaps->Units = 0x0;
  345. ValueCaps->LogicalMin = 0xffffff80;
  346. ValueCaps->LogicalMax = 0x7f;
  347. ValueCaps->PhysicalMin = 0x0;
  348. ValueCaps->PhysicalMax = 0xffffffff;
  349. ValueCaps->Range.UsageMin = 0x6;
  350. ValueCaps->Range.UsageMax = 0x6;
  351. ValueCaps->Range.StringMin = 0x0;
  352. ValueCaps->Range.StringMax = 0x0;
  353. ValueCaps->Range.DesignatorMin = 0x0;
  354. ValueCaps->Range.DesignatorMax = 0x0;
  355. ValueCaps->Range.DataIndexMin = 0x0;
  356. ValueCaps->Range.DataIndexMax = 0x0;
  357.  
  358. ValueCaps = (PHIDP_VALUE_CAPS) ((void *) ((char *) ValueCaps + 72));
  359.  
  360. ValueCaps->UsagePage = 0xffa1;
  361. ValueCaps->ReportID = 0x0;
  362. ValueCaps->IsAlias = 0x0;
  363. ValueCaps->BitField = 0x2;
  364. ValueCaps->LinkCollection = 0x1;
  365. ValueCaps->LinkUsage = 0x2;
  366. ValueCaps->LinkUsagePage = 0xffa0;
  367. ValueCaps->IsRange = 0x0;
  368. ValueCaps->IsStringRange = 0x0;
  369. ValueCaps->IsDesignatorRange = 0x0;
  370. ValueCaps->IsAbsolute = 0x1;
  371. ValueCaps->HasNull = 0x0;
  372. ValueCaps->Reserved = 0x04;
  373. ValueCaps->BitSize = 0x8;
  374. ValueCaps->ReportCount = 0x1;
  375. /* ValueCaps->Reserved2[0] = 0x0;
  376. ValueCaps->Reserved2[1] = 0x24f0;
  377. ValueCaps->Reserved2[2] = 0x3d;
  378. ValueCaps->Reserved2[3] = 0x24b8;
  379. ValueCaps->Reserved2[4] = 0x0;*/
  380.  
  381.  
  382. ValueCaps->Reserved2[0] = 0x3d;
  383. ValueCaps->Reserved2[1] = 0x28;
  384. ValueCaps->Reserved2[2] = 0x00;
  385. ValueCaps->Reserved2[3] = 0x00;
  386. ValueCaps->Reserved2[4] = 0x3d;
  387.  
  388. ValueCaps->UnitsExp = 0x0;
  389. ValueCaps->Units = 0x0;
  390. ValueCaps->LogicalMin = 0xffffff80;
  391. ValueCaps->LogicalMax = 0x7f;
  392. ValueCaps->PhysicalMin = 0x0;
  393. ValueCaps->PhysicalMax = 0xffffffff;
  394. ValueCaps->Range.UsageMin = 0x5;
  395. ValueCaps->Range.UsageMax = 0x5;
  396. ValueCaps->Range.StringMin = 0x0;
  397. ValueCaps->Range.StringMax = 0x0;
  398. ValueCaps->Range.DesignatorMin = 0x0;
  399. ValueCaps->Range.DesignatorMax = 0x0;
  400. ValueCaps->Range.DataIndexMin = 0x1;
  401. ValueCaps->Range.DataIndexMax = 0x1;
  402.  
  403. *ValueCapsLength = 2;
  404. return 0x110000;
  405. } else if (ReportType == 2) {
  406.  
  407. *ValueCapsLength = 0;
  408. return 0xc0110004;
  409. }
  410.  
  411. return HIDP_STATUS_SUCCESS;
Add Comment
Please, Sign In to add comment