34#define HIDP_LINK_COLLECTION_ROOT ((USHORT)-1)
35#define HIDP_LINK_COLLECTION_UNSPECIFIED ((USHORT)0)
37typedef enum _HIDP_REPORT_TYPE
50#define HidP_IsSameUsageAndPage(u1, u2) ((*(PULONG)&u1) == (*(PULONG)&u2))
59 USHORT LinkCollection;
65 BOOLEAN IsStringRange;
66 BOOLEAN IsDesignatorRange;
73 USAGE UsageMin, UsageMax;
74 USHORT StringMin, StringMax;
75 USHORT DesignatorMin, DesignatorMax;
76 USHORT DataIndexMin, DataIndexMax;
80 USAGE Usage, Reserved1;
81 USHORT StringIndex, Reserved2;
82 USHORT DesignatorIndex, Reserved3;
83 USHORT DataIndex, Reserved4;
96 USHORT LinkCollection;
102 BOOLEAN IsStringRange;
103 BOOLEAN IsDesignatorRange;
116 LONG LogicalMin, LogicalMax;
117 LONG PhysicalMin, PhysicalMax;
122 USAGE UsageMin, UsageMax;
123 USHORT StringMin, StringMax;
124 USHORT DesignatorMin, DesignatorMax;
125 USHORT DataIndexMin, DataIndexMax;
130 USAGE Usage, Reserved1;
131 USHORT StringIndex, Reserved2;
132 USHORT DesignatorIndex, Reserved3;
133 USHORT DataIndex, Reserved4;
196 USHORT NumberOfChildren;
199 ULONG CollectionType : 8;
226typedef PUCHAR PHIDP_REPORT_DESCRIPTOR;
227typedef struct _HIDP_PREPARSED_DATA* PHIDP_PREPARSED_DATA;
233 USHORT InputReportByteLength;
234 USHORT OutputReportByteLength;
235 USHORT FeatureReportByteLength;
238 USHORT NumberLinkCollectionNodes;
240 USHORT NumberInputButtonCaps;
241 USHORT NumberInputValueCaps;
242 USHORT NumberInputDataIndices;
244 USHORT NumberOutputButtonCaps;
245 USHORT NumberOutputValueCaps;
246 USHORT NumberOutputDataIndices;
248 USHORT NumberFeatureButtonCaps;
249 USHORT NumberFeatureValueCaps;
250 USHORT NumberFeatureDataIndices;
290 UCHAR NumGlobalUnknowns;
297NTSTATUS __stdcall HidP_GetCaps(IN PHIDP_PREPARSED_DATA PreparsedData,
313NTSTATUS __stdcall HidP_GetLinkCollectionNodes(
315 IN OUT PULONG LinkCollectionNodesLength,
316 IN PHIDP_PREPARSED_DATA PreparsedData);
336NTSTATUS __stdcall HidP_GetButtonCaps(IN HIDP_REPORT_TYPE ReportType,
338 IN OUT PUSHORT ButtonCapsLength,
339 IN PHIDP_PREPARSED_DATA PreparsedData);
340#define HidP_GetButtonCaps(_Type_, _Caps_, _Len_, _Data_) \
341 HidP_GetSpecificButtonCaps(_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
342NTSTATUS __stdcall HidP_GetSpecificButtonCaps(
343 IN HIDP_REPORT_TYPE ReportType,
345 IN USHORT LinkCollection,
348 IN OUT PUSHORT ButtonCapsLength,
349 IN PHIDP_PREPARSED_DATA PreparsedData);
401NTSTATUS __stdcall HidP_GetValueCaps(IN HIDP_REPORT_TYPE ReportType,
403 IN OUT PUSHORT ValueCapsLength,
404 IN PHIDP_PREPARSED_DATA PreparsedData);
405#define HidP_GetValueCaps(_Type_, _Caps_, _Len_, _Data_) \
406 HidP_GetSpecificValueCaps(_Type_, 0, 0, 0, _Caps_, _Len_, _Data_)
407NTSTATUS __stdcall HidP_GetSpecificValueCaps(
408 IN HIDP_REPORT_TYPE ReportType,
410 IN USHORT LinkCollection,
413 IN OUT PUSHORT ValueCapsLength,
414 IN PHIDP_PREPARSED_DATA PreparsedData);
468NTSTATUS __stdcall HidP_GetExtendedAttributes(
469 IN HIDP_REPORT_TYPE ReportType,
471 IN PHIDP_PREPARSED_DATA PreparsedData,
473 IN OUT PULONG LengthAttributes);
497NTSTATUS __stdcall HidP_InitializeReportForID(IN HIDP_REPORT_TYPE ReportType,
499 IN PHIDP_PREPARSED_DATA
502 IN ULONG ReportLength);
532NTSTATUS __stdcall HidP_SetData(IN HIDP_REPORT_TYPE ReportType,
534 IN OUT PULONG DataLength,
535 IN PHIDP_PREPARSED_DATA PreparsedData,
537 IN ULONG ReportLength);
593NTSTATUS __stdcall HidP_GetData(IN HIDP_REPORT_TYPE ReportType,
595 IN OUT PULONG DataLength,
596 IN PHIDP_PREPARSED_DATA PreparsedData,
598 IN ULONG ReportLength);
641ULONG __stdcall HidP_MaxDataListLength(IN HIDP_REPORT_TYPE ReportType,
642 IN PHIDP_PREPARSED_DATA PreparsedData);
663#define HidP_SetButtons(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) \
664 HidP_SetUsages(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle)
666NTSTATUS __stdcall HidP_SetUsages(IN HIDP_REPORT_TYPE ReportType,
668 IN USHORT LinkCollection,
670 IN OUT PULONG UsageLength,
671 IN PHIDP_PREPARSED_DATA PreparsedData,
673 IN ULONG ReportLength);
753#define HidP_UnsetButtons(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle) \
754 HidP_UnsetUsages(Rty, Up, Lco, ULi, ULe, Ppd, Rep, Rle)
756NTSTATUS __stdcall HidP_UnsetUsages(IN HIDP_REPORT_TYPE ReportType,
758 IN USHORT LinkCollection,
760 IN OUT PULONG UsageLength,
761 IN PHIDP_PREPARSED_DATA PreparsedData,
763 IN ULONG ReportLength);
838#define HidP_GetButtons(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe) \
839 HidP_GetUsages(Rty, UPa, LCo, ULi, ULe, Ppd, Rep, RLe)
841NTSTATUS __stdcall HidP_GetUsages(IN HIDP_REPORT_TYPE ReportType,
843 IN USHORT LinkCollection,
844 OUT USAGE* UsageList,
845 IN OUT ULONG* UsageLength,
846 IN PHIDP_PREPARSED_DATA PreparsedData,
848 IN ULONG ReportLength);
920#define HidP_GetButtonsEx(Rty, LCo, BLi, ULe, Ppd, Rep, RLe) \
921 HidP_GetUsagesEx(Rty, LCo, BLi, ULe, Ppd, Rep, RLe)
923NTSTATUS __stdcall HidP_GetUsagesEx(IN HIDP_REPORT_TYPE ReportType,
924 IN USHORT LinkCollection,
926 IN OUT ULONG* UsageLength,
927 IN PHIDP_PREPARSED_DATA PreparsedData,
929 IN ULONG ReportLength);
994#define HidP_GetButtonListLength(RTy, UPa, Ppd) \
995 HidP_GetUsageListLength(Rty, UPa, Ppd)
997ULONG __stdcall HidP_MaxUsageListLength(IN HIDP_REPORT_TYPE ReportType,
999 IN PHIDP_PREPARSED_DATA PreparsedData);
1025NTSTATUS __stdcall HidP_SetUsageValue(IN HIDP_REPORT_TYPE ReportType,
1027 IN USHORT LinkCollection,
1029 IN ULONG UsageValue,
1030 IN PHIDP_PREPARSED_DATA PreparsedData,
1031 IN OUT PCHAR Report,
1032 IN ULONG ReportLength);
1101NTSTATUS __stdcall HidP_SetScaledUsageValue(
1102 IN HIDP_REPORT_TYPE ReportType,
1104 IN USHORT LinkCollection,
1107 IN PHIDP_PREPARSED_DATA PreparsedData,
1108 IN OUT PCHAR Report,
1109 IN ULONG ReportLength);
1193NTSTATUS __stdcall HidP_SetUsageValueArray(IN HIDP_REPORT_TYPE ReportType,
1195 IN USHORT LinkCollection,
1197 IN PCHAR UsageValue,
1198 IN USHORT UsageValueByteLength,
1199 IN PHIDP_PREPARSED_DATA
1202 IN ULONG ReportLength);
1291NTSTATUS __stdcall HidP_GetUsageValue(IN HIDP_REPORT_TYPE ReportType,
1293 IN USHORT LinkCollection,
1295 OUT PULONG UsageValue,
1296 IN PHIDP_PREPARSED_DATA PreparsedData,
1298 IN ULONG ReportLength);
1360NTSTATUS __stdcall HidP_GetScaledUsageValue(
1361 IN HIDP_REPORT_TYPE ReportType,
1363 IN USHORT LinkCollection,
1365 OUT PLONG UsageValue,
1366 IN PHIDP_PREPARSED_DATA PreparsedData,
1368 IN ULONG ReportLength);
1453NTSTATUS __stdcall HidP_GetUsageValueArray(IN HIDP_REPORT_TYPE ReportType,
1455 IN USHORT LinkCollection,
1457 OUT PCHAR UsageValue,
1458 IN USHORT UsageValueByteLength,
1459 IN PHIDP_PREPARSED_DATA
1462 IN ULONG ReportLength);
1550NTSTATUS __stdcall HidP_UsageListDifference(IN PUSAGE PreviousUsageList,
1551 IN PUSAGE CurrentUsageList,
1552 OUT PUSAGE BreakUsageList,
1553 OUT PUSAGE MakeUsageList,
1554 IN ULONG UsageListLength);
1578NTSTATUS __stdcall HidP_UsageAndPageListDifference(
1583 IN ULONG UsageListLength);
1588typedef enum _HIDP_KEYBOARD_DIRECTION
1590 HidP_Keyboard_Break,
1592} HIDP_KEYBOARD_DIRECTION;
1603 ULONG LeftControl : 1;
1604 ULONG LeftShift : 1;
1607 ULONG RightControl : 1;
1608 ULONG RightShift : 1;
1612 ULONG ScollLock : 1;
1614 ULONG Reserved : 21;
1625typedef BOOLEAN (*PHIDP_INSERT_SCANCODES)(
1627 IN PCHAR NewScanCodes,
1631NTSTATUS __stdcall HidP_TranslateUsageAndPagesToI8042ScanCodes(
1633 IN ULONG UsageListLength,
1634 IN HIDP_KEYBOARD_DIRECTION KeyAction,
1636 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
1637 IN PVOID InsertCodesContext);
1643NTSTATUS __stdcall HidP_TranslateUsagesToI8042ScanCodes(
1644 IN PUSAGE ChangedUsageList,
1645 IN ULONG UsageListLength,
1646 IN HIDP_KEYBOARD_DIRECTION KeyAction,
1648 IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
1649 IN PVOID InsertCodesContext);
1660#ifndef FACILITY_HID_ERROR_CODE
1661#define FACILITY_HID_ERROR_CODE 0x11
1664#define HIDP_ERROR_CODES(SEV, CODE) \
1665 ((NTSTATUS)(((SEV) << 28) | (FACILITY_HID_ERROR_CODE << 16) | (CODE)))
1667#define HIDP_STATUS_SUCCESS (HIDP_ERROR_CODES(0x0, 0))
1668#define HIDP_STATUS_NULL (HIDP_ERROR_CODES(0x8, 1))
1669#define HIDP_STATUS_INVALID_PREPARSED_DATA (HIDP_ERROR_CODES(0xC, 1))
1670#define HIDP_STATUS_INVALID_REPORT_TYPE (HIDP_ERROR_CODES(0xC, 2))
1671#define HIDP_STATUS_INVALID_REPORT_LENGTH (HIDP_ERROR_CODES(0xC, 3))
1672#define HIDP_STATUS_USAGE_NOT_FOUND (HIDP_ERROR_CODES(0xC, 4))
1673#define HIDP_STATUS_VALUE_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC, 5))
1674#define HIDP_STATUS_BAD_LOG_PHY_VALUES (HIDP_ERROR_CODES(0xC, 6))
1675#define HIDP_STATUS_BUFFER_TOO_SMALL (HIDP_ERROR_CODES(0xC, 7))
1676#define HIDP_STATUS_INTERNAL_ERROR (HIDP_ERROR_CODES(0xC, 8))
1677#define HIDP_STATUS_I8042_TRANS_UNKNOWN (HIDP_ERROR_CODES(0xC, 9))
1678#define HIDP_STATUS_INCOMPATIBLE_REPORT_ID (HIDP_ERROR_CODES(0xC, 0xA))
1679#define HIDP_STATUS_NOT_VALUE_ARRAY (HIDP_ERROR_CODES(0xC, 0xB))
1680#define HIDP_STATUS_IS_VALUE_ARRAY (HIDP_ERROR_CODES(0xC, 0xC))
1681#define HIDP_STATUS_DATA_INDEX_NOT_FOUND (HIDP_ERROR_CODES(0xC, 0xD))
1682#define HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE (HIDP_ERROR_CODES(0xC, 0xE))
1683#define HIDP_STATUS_BUTTON_NOT_PRESSED (HIDP_ERROR_CODES(0xC, 0xF))
1684#define HIDP_STATUS_REPORT_DOES_NOT_EXIST (HIDP_ERROR_CODES(0xC, 0x10))
1685#define HIDP_STATUS_NOT_IMPLEMENTED (HIDP_ERROR_CODES(0xC, 0x20))
1690#define HIDP_STATUS_I8242_TRANS_UNKNOWN HIDP_STATUS_I8042_TRANS_UNKNOWN