| 1 | /* | 
 
 
 
 
 | 2 | * ntddkbd.h | 
 
 
 
 
 | 3 | * | 
 
 
 
 
 | 4 | * Keyboard IOCTL interface | 
 
 
 
 
 | 5 | * | 
 
 
 
 
 | 6 | * This file is part of the w32api package. | 
 
 
 
 
 | 7 | * | 
 
 
 
 
 | 8 | * Contributors: | 
 
 
 
 
 | 9 | *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net> | 
 
 
 
 
 | 10 | * | 
 
 
 
 
 | 11 | * THIS SOFTWARE IS NOT COPYRIGHTED | 
 
 
 
 
 | 12 | * | 
 
 
 
 
 | 13 | * This source code is offered for use in the public domain. You may | 
 
 
 
 
 | 14 | * use, modify or distribute it freely. | 
 
 
 
 
 | 15 | * | 
 
 
 
 
 | 16 | * This code is distributed in the hope that it will be useful but | 
 
 
 
 
 | 17 | * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY | 
 
 
 
 
 | 18 | * DISCLAIMED. This includes but is not limited to warranties of | 
 
 
 
 
 | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
 
 
 
 
 | 20 | * | 
 
 
 
 
 | 21 | */ | 
 
 
 
 
 | 22 |  | 
 
 
 
 
 | 23 | #ifndef __NTDDKBD_H | 
 
 
 
 
 | 24 | #define __NTDDKBD_H | 
 
 
 
 
 | 25 |  | 
 
 
 
 
 | 26 | #if __GNUC__ >=3 | 
 
 
 
 
 | 27 | #pragma GCC system_header | 
 
 
 
 
 | 28 | #endif | 
 
 
 
 
 | 29 |  | 
 
 
 
 
 | 30 | #ifdef __cplusplus | 
 
 
 
 
 | 31 | extern "C" { | 
 
 
 
 
 | 32 | #endif | 
 
 
 
 
 | 33 |  | 
 
 
 
 
 | 34 | #include "ntddk.h" | 
 
 
 
 
 | 35 |  | 
 
 
 
 
 | 36 | #define DD_KEYBOARD_DEVICE_NAME           "\\Device\\KeyboardClass" | 
 
 
 
 
 | 37 | #define DD_KEYBOARD_DEVICE_NAME_U         L"\\Device\\KeyboardClass" | 
 
 
 
 
 | 38 |  | 
 
 
 
 
 | 39 | #define IOCTL_KEYBOARD_QUERY_ATTRIBUTES \ | 
 
 
 
 
 | 40 | CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
 
 
 
 
 | 41 |  | 
 
 
 
 
 | 42 | #define IOCTL_KEYBOARD_QUERY_INDICATORS \ | 
 
 
 
 
 | 43 | CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
 
 
 
 
 | 44 |  | 
 
 
 
 
 | 45 | #define IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION \ | 
 
 
 
 
 | 46 | CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0020, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
 
 
 
 
 | 47 |  | 
 
 
 
 
 | 48 | #define IOCTL_KEYBOARD_QUERY_TYPEMATIC \ | 
 
 
 
 
 | 49 | CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
 
 
 
 
 | 50 |  | 
 
 
 
 
 | 51 | #define IOCTL_KEYBOARD_SET_TYPEMATIC \ | 
 
 
 
 
 | 52 | CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0001, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
 
 
 
 
 | 53 |  | 
 
 
 
 
 | 54 | #define IOCTL_KEYBOARD_SET_INDICATORS \ | 
 
 
 
 
 | 55 | CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS) | 
 
 
 
 
 | 56 |  | 
 
 
 
 
 | 57 |  | 
 
 
 
 
 | 58 | DEFINE_GUID(GUID_DEVINTERFACE_KEYBOARD, \ | 
 
 
 
 
 | 59 | 0x884b96c3, 0x56ef, 0x11d1, 0xbc, 0x8c, 0x00, 0xa0, 0xc9, 0x14, 0x05, 0xdd); | 
 
 
 
 
 | 60 |  | 
 
 
 
 
 | 61 | #define KEYBOARD_ERROR_VALUE_BASE         10000 | 
 
 
 
 
 | 62 |  | 
 
 
 
 
 | 63 | /* KEYBOARD_INPUT_DATA.MakeCode constants */ | 
 
 
 
 
 | 64 | #define KEYBOARD_OVERRUN_MAKE_CODE        0xFF | 
 
 
 
 
 | 65 |  | 
 
 
 
 
 | 66 | /* KEYBOARD_INPUT_DATA.Flags constants */ | 
 
 
 
 
 | 67 | #define KEY_MAKE                          0 | 
 
 
 
 
 | 68 | #define KEY_BREAK                         1 | 
 
 
 
 
 | 69 | #define KEY_E0                            2 | 
 
 
 
 
 | 70 | #define KEY_E1                            4 | 
 
 
 
 
 | 71 |  | 
 
 
 
 
 | 72 | typedef struct _KEYBOARD_INPUT_DATA { | 
 
 
 
 
 | 73 | USHORT  UnitId; | 
 
 
 
 
 | 74 | USHORT  MakeCode; | 
 
 
 
 
 | 75 | USHORT  Flags; | 
 
 
 
 
 | 76 | USHORT  Reserved; | 
 
 
 
 
 | 77 | ULONG  ExtraInformation; | 
 
 
 
 
 | 78 | } KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA; | 
 
 
 
 
 | 79 |  | 
 
 
 
 
 | 80 |  | 
 
 
 
 
 | 81 | typedef struct _KEYBOARD_TYPEMATIC_PARAMETERS { | 
 
 
 
 
 | 82 | USHORT  UnitId; | 
 
 
 
 
 | 83 | USHORT  Rate; | 
 
 
 
 
 | 84 | USHORT  Delay; | 
 
 
 
 
 | 85 | } KEYBOARD_TYPEMATIC_PARAMETERS, *PKEYBOARD_TYPEMATIC_PARAMETERS; | 
 
 
 
 
 | 86 |  | 
 
 
 
 
 | 87 | typedef struct _KEYBOARD_ID { | 
 
 
 
 
 | 88 | UCHAR  Type; | 
 
 
 
 
 | 89 | UCHAR  Subtype; | 
 
 
 
 
 | 90 | } KEYBOARD_ID, *PKEYBOARD_ID; | 
 
 
 
 
 | 91 |  | 
 
 
 
 
 | 92 | #define ENHANCED_KEYBOARD(Id) ((Id).Type == 2 || (Id).Type == 4 || FAREAST_KEYBOARD(Id)) | 
 
 
 
 
 | 93 | #define FAREAST_KEYBOARD(Id)  ((Id).Type == 7 || (Id).Type == 8) | 
 
 
 
 
 | 94 |  | 
 
 
 
 
 | 95 | typedef struct _KEYBOARD_INDICATOR_PARAMETERS { | 
 
 
 
 
 | 96 | USHORT  UnitId; | 
 
 
 
 
 | 97 | USHORT  LedFlags; | 
 
 
 
 
 | 98 | } KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS; | 
 
 
 
 
 | 99 |  | 
 
 
 
 
 | 100 | typedef struct _INDICATOR_LIST { | 
 
 
 
 
 | 101 | USHORT  MakeCode; | 
 
 
 
 
 | 102 | USHORT  IndicatorFlags; | 
 
 
 
 
 | 103 | } INDICATOR_LIST, *PINDICATOR_LIST; | 
 
 
 
 
 | 104 |  | 
 
 
 
 
 | 105 | typedef struct _KEYBOARD_INDICATOR_TRANSLATION { | 
 
 
 
 
 | 106 | USHORT  NumberOfIndicatorKeys; | 
 
 
 
 
 | 107 | INDICATOR_LIST  IndicatorList[1]; | 
 
 
 
 
 | 108 | } KEYBOARD_INDICATOR_TRANSLATION, *PKEYBOARD_INDICATOR_TRANSLATION; | 
 
 
 
 
 | 109 |  | 
 
 
 
 
 | 110 | typedef struct _KEYBOARD_ATTRIBUTES { | 
 
 
 
 
 | 111 | KEYBOARD_ID  KeyboardIdentifier; | 
 
 
 
 
 | 112 | USHORT  KeyboardMode; | 
 
 
 
 
 | 113 | USHORT  NumberOfFunctionKeys; | 
 
 
 
 
 | 114 | USHORT  NumberOfIndicators; | 
 
 
 
 
 | 115 | USHORT  NumberOfKeysTotal; | 
 
 
 
 
 | 116 | ULONG  InputDataQueueLength; | 
 
 
 
 
 | 117 | KEYBOARD_TYPEMATIC_PARAMETERS  KeyRepeatMinimum; | 
 
 
 
 
 | 118 | KEYBOARD_TYPEMATIC_PARAMETERS  KeyRepeatMaximum; | 
 
 
 
 
 | 119 | } KEYBOARD_ATTRIBUTES, *PKEYBOARD_ATTRIBUTES; | 
 
 
 
 
 | 120 |  | 
 
 
 
 
 | 121 | typedef struct _KEYBOARD_UNIT_ID_PARAMETER { | 
 
 
 
 
 | 122 | USHORT  UnitId; | 
 
 
 
 
 | 123 | } KEYBOARD_UNIT_ID_PARAMETER, *PKEYBOARD_UNIT_ID_PARAMETER; | 
 
 
 
 
 | 124 |  | 
 
 
 
 
 | 125 | typedef struct _KEYBOARD_IME_STATUS { | 
 
 
 
 
 | 126 | USHORT  UnitId; | 
 
 
 
 
 | 127 | ULONG  ImeOpen; | 
 
 
 
 
 | 128 | ULONG  ImeConvMode; | 
 
 
 
 
 | 129 | } KEYBOARD_IME_STATUS, *PKEYBOARD_IME_STATUS; | 
 
 
 
 
 | 130 |  | 
 
 
 
 
 | 131 | #ifdef __cplusplus | 
 
 
 
 
 | 132 | } | 
 
 
 
 
 | 133 | #endif | 
 
 
 
 
 | 134 |  | 
 
 
 
 
 | 135 | #endif /* __NTDDKBD_H */ |