5 typedef struct tagKBDNLSLAYER
8 USHORT LayoutInformation
;
10 struct _VK_TO_FUNCTION_TABLE
*pVkToF
;
13 } KBDNLSLAYER
, *PKBDNLSLAYER
;
15 typedef struct tagKBDFILE
18 struct tagKBDFILE
*pkfNext
;
21 struct _KBDTABLES
*pKbdTbl
;
23 PKBDNLSLAYER pKbdNlsTbl
;
29 struct tagKL
*pklNext
;
30 struct tagKL
*pklPrev
;
41 typedef struct _ATTACHINFO
43 struct _ATTACHINFO
*paiNext
;
46 } ATTACHINFO
, *PATTACHINFO
;
48 extern PATTACHINFO gpai
;
50 /* Keyboard layout undocumented flags */
51 #define KLF_UNLOAD 0x20000000
54 #define KS_DOWN_BIT 0x80
55 #define KS_LOCK_BIT 0x01
57 #define SC_KEY_UP 0x8000
59 #define LP_DO_NOT_CARE_BIT (1<<25) // For GetKeyNameText
62 INIT_FUNCTION NTSTATUS NTAPI
InitInputImpl(VOID
);
63 BOOL FASTCALL
IntBlockInput(PTHREADINFO W32Thread
, BOOL BlockIt
);
64 DWORD NTAPI
CreateSystemThreads(UINT Type
);
65 NTSTATUS FASTCALL
UserAttachThreadInput(PTHREADINFO
,PTHREADINFO
,BOOL
);
66 BOOL FASTCALL
IsRemoveAttachThread(PTHREADINFO
);
67 VOID FASTCALL
DoTheScreenSaver(VOID
);
68 #define ThreadHasInputAccess(W32Thread) (TRUE)
71 INIT_FUNCTION NTSTATUS NTAPI
InitKeyboardImpl(VOID
);
72 VOID NTAPI
UserInitKeyboard(HANDLE hKeyboardDevice
);
73 PKL
W32kGetDefaultKeyLayout(VOID
);
74 VOID NTAPI
UserProcessKeyboardInput(PKEYBOARD_INPUT_DATA pKeyInput
);
75 BOOL NTAPI
UserSendKeyboardInput(KEYBDINPUT
*pKbdInput
, BOOL bInjected
);
76 PKL NTAPI
UserHklToKbl(HKL hKl
);
77 BOOL NTAPI
UserSetDefaultInputLang(HKL hKl
);
80 WORD FASTCALL
UserGetMouseButtonsState(VOID
);
81 VOID NTAPI
UserProcessMouseInput(PMOUSE_INPUT_DATA pMouseInputData
);
82 BOOL NTAPI
UserSendMouseInput(MOUSEINPUT
*pMouseInput
, BOOL bInjected
);
84 extern HANDLE ghKeyboardDevice
;
85 extern PTHREADINFO ptiRawInput
;
86 extern BYTE gafAsyncKeyState
[256 * 2 / 8]; // 2 bits per key
88 #define GET_KS_BYTE(vk) ((vk) * 2 / 8)
89 #define GET_KS_DOWN_BIT(vk) (1 << (((vk) % 4)*2))
90 #define GET_KS_LOCK_BIT(vk) (1 << (((vk) % 4)*2 + 1))
91 #define IS_KEY_DOWN(ks, vk) (((ks)[GET_KS_BYTE(vk)] & GET_KS_DOWN_BIT(vk)) ? TRUE : FALSE)
92 #define IS_KEY_LOCKED(ks, vk) (((ks)[GET_KS_BYTE(vk)] & GET_KS_LOCK_BIT(vk)) ? TRUE : FALSE)
93 #define SET_KEY_DOWN(ks, vk, down) (ks)[GET_KS_BYTE(vk)] = ((down) ? \
94 ((ks)[GET_KS_BYTE(vk)] | GET_KS_DOWN_BIT(vk)) : \
95 ((ks)[GET_KS_BYTE(vk)] & ~GET_KS_DOWN_BIT(vk)))
96 #define SET_KEY_LOCKED(ks, vk, down) (ks)[GET_KS_BYTE(vk)] = ((down) ? \
97 ((ks)[GET_KS_BYTE(vk)] | GET_KS_LOCK_BIT(vk)) : \
98 ((ks)[GET_KS_BYTE(vk)] & ~GET_KS_LOCK_BIT(vk)))
101 extern PKL gspklBaseLayout
;
102 extern KEYBOARD_ATTRIBUTES gKeyboardInfo
;