113 *ppIndicatorTrans = pRet;
197 WARN(
"NtDeviceIoControlFile() failed, ignored\n");
302 for (
i = 0; pKbdTbl->pCharModifiers->pVkToBit[
i].Vk;
i++)
303 if (
IS_KEY_DOWN(pKeyState, pKbdTbl->pCharModifiers->pVkToBit[
i].Vk))
304 dwModBits |= pKbdTbl->pCharModifiers->pVkToBit[
i].ModBits;
306 TRACE(
"Current Mod Bits: %lx\n", dwModBits);
326 PVK_TO_WCHARS10 pVkToVch;
327 DWORD i, dwModBits, dwVkModBits, dwModNumber = 0;
332 dwModBits = pKeyState ?
IntGetModBits(pKbdTbl, pKeyState) : 0;
336 TRACE(
"TryToTranslate: %04x %x\n", wVirtKey, dwModBits);
340 dwModBits &= ~KBDALT;
342 if (dwModBits > pKbdTbl->pCharModifiers->wMaxModBits)
344 TRACE(
"dwModBits %x > wMaxModBits %x\n", dwModBits, pKbdTbl->pCharModifiers->wMaxModBits);
348 for (
i = 0; pKbdTbl->pVkToWcharTable[
i].pVkToWchars;
i++)
350 pVkToVchTbl = &pKbdTbl->pVkToWcharTable[
i];
351 pVkToVch = (PVK_TO_WCHARS10)(pVkToVchTbl->pVkToWchars);
352 while (pVkToVch->VirtualKey)
354 if (wVirtKey == (pVkToVch->VirtualKey & 0xFF))
356 dwVkModBits = dwModBits;
359 if ((pVkToVch->Attributes & wCaplokAttr) &&
367 if (dwVkModBits > pKbdTbl->pCharModifiers->wMaxModBits)
371 dwModNumber = pKbdTbl->pCharModifiers->ModNumber[dwVkModBits];
379 wch = pVkToVch->wch[dwModNumber];
385 *pwcTranslatedChar = wch;
387 TRACE(
"%lu %04x: dwModNumber %08x Char %04x\n",
388 i, wVirtKey, dwModNumber, wch);
393 pVkToVch = (PVK_TO_WCHARS10)(((
BYTE *)pVkToVch) + pVkToVchTbl->
cbSize);
394 if (pVkToVch->VirtualKey != 0xFF)
396 WARN(
"Found dead key with no trailer in the table.\n");
397 WARN(
"VK: %04x, ADDR: %p\n", wVirtKey, pVkToVch);
400 *pwcTranslatedChar = pVkToVch->wch[dwModNumber];
404 pVkToVch = (PVK_TO_WCHARS10)(((
BYTE *)pVkToVch) + pVkToVchTbl->
cbSize);
410 if (wVirtKey >=
'A' && wVirtKey <=
'Z' &&
414 *pwcTranslatedChar = (wVirtKey -
'A') + 1;
438 WCHAR wchTranslatedChar;
439 BOOL bDead, bLigature;
440 static WCHAR wchDead = 0;
457 WARN(
"Not handling ligature (yet)\n" );
465 WCHAR wchFirst, wchSecond;
466 TRACE(
"Previous dead char: %lc (%x)\n", wchDead, wchDead);
468 if (pKbdTbl->pDeadKey)
470 for (
i = 0; pKbdTbl->pDeadKey[
i].dwBoth;
i++)
472 wchFirst = pKbdTbl->pDeadKey[
i].dwBoth >> 16;
473 wchSecond = pKbdTbl->pDeadKey[
i].dwBoth & 0xFFFF;
474 if (wchFirst == wchDead && wchSecond == wchTranslatedChar)
476 wchTranslatedChar = pKbdTbl->pDeadKey[
i].wchComposed;
486 if (wchDead == 0x8000)
488 ERR(
"GCC is inventing bits, ignoring fake dead key\n");
494 TRACE(
"Final char: %lc (%x)\n", wchTranslatedChar, wchTranslatedChar);
502 pwszBuff[iRet++] = wchDead;
508 pwszBuff[iRet++] = wchTranslatedChar;
511 wchDead = bDead ? wchTranslatedChar : 0;
513 return bDead ? -iRet : iRet;
532 if ((pKbdTbl->pusVSCtoVK[
i] & 0xFF) == wVk)
537 for (
i = 0; pKbdTbl->pVSCtoVK_E0[
i].Vsc;
i++)
539 if ((pKbdTbl->pVSCtoVK_E0[
i].Vk & 0xFF) == wVk)
540 return 0xE000 | pKbdTbl->pVSCtoVK_E0[
i].Vsc;
543 for (
i = 0; pKbdTbl->pVSCtoVK_E1[
i].Vsc;
i++)
545 if ((pKbdTbl->pVSCtoVK_E1[
i].Vk & 0xFF) == wVk)
546 return 0xE100 | pKbdTbl->pVSCtoVK_E1[
i].Vsc;
567 if ((wScanCode & 0xFF00) == 0xE000)
569 for (
i = 0; pKbdTbl->pVSCtoVK_E0[
i].Vsc;
i++)
571 if (pKbdTbl->pVSCtoVK_E0[
i].Vsc == (wScanCode & 0xFF))
573 wVk = pKbdTbl->pVSCtoVK_E0[
i].Vk;
577 else if ((wScanCode & 0xFF00) == 0xE100)
579 for (
i = 0; pKbdTbl->pVSCtoVK_E1[
i].Vsc;
i++)
581 if (pKbdTbl->pVSCtoVK_E1[
i].Vsc == (wScanCode & 0xFF))
583 wVk = pKbdTbl->pVSCtoVK_E1[
i].Vk;
587 else if (wScanCode < pKbdTbl->bMaxVSCtoVK)
589 wVk = pKbdTbl->pusVSCtoVK[wScanCode];
593 return wVk != 0xFF ? wVk : 0;
606 BOOL bDead, bLigature;
634 TRACE(
"Enter NtUserGetAsyncKeyState\n");
636 if (
Key >= 0x100 ||
Key < 0)
639 ERR(
"Invalid parameter Key\n");
653 TRACE(
"Leave NtUserGetAsyncKeyState, ret=%u\n", wRet);
692 KbdHookData.
flags = 0;
738 ERR(
"Invalid window\n");
745 ERR(
"UserGetDCEx failed!\n");
755 ERR(
"NtGdiCreateCompatibleBitmap failed!\n");
762 ERR(
"NtGdiCreateCompatibleDC failed!\n");
767 NtGdiBitBlt(
hdcMem, 0, 0,
cx,
cy,
hdc, 0, 0,
SRCCOPY,
CLR_INVALID, 0);
804 pKL = (bNext ? pKL->pklNext : pKL->pklPrev);
808 }
while (pKL != pFirstKL);
827 ERR(
"IntLanguageToggle(): NULL pFocusQueue\n");
830 pWnd = pFocusQueue->spwndFocus;
832 pWnd = pFocusQueue->spwndActive;
836 pti = pWnd->
head.pti;
839 if (nKeyState == INPUTLANGCHANGE_FORWARD)
841 else if (nKeyState == INPUTLANGCHANGE_BACKWARD)
845 wParam |= INPUTLANGCHANGE_SYSCHARSET;
861 *pKeyState = INPUTLANGCHANGE_FORWARD;
863 *pKeyState = INPUTLANGCHANGE_BACKWARD;
865 *pKeyState = INPUTLANGCHANGE_FORWARD;
867 *pKeyState = INPUTLANGCHANGE_BACKWARD;
907 TRACE(
"VK_MENU && !VK_CONTROL - wVk: 0x%04x\n", wVk);
949 else if (wVk >=
'0' && wVk <=
'9')
951 else if (wVk >=
'A' && wVk <=
'F')
952 uDigit = wVk -
'A' + 10;
971 TRACE(
"gAltNumPadState: %lu, gAltNumPadValue: %lu\n",
979 TRACE(
"End of Alt+Numpad\n");
983 WCHAR wchUnicodeChar;
1007 USHORT AnsiCP, OemCP, wCodePage, mbChar;
1052 Status = pRtlCPToUnicodeN(&wchUnicodeChar,
1053 sizeof(wchUnicodeChar),
1065 msgChar.wParam = wchUnicodeChar;
1068 msgChar.pt =
gpsi->ptCursor;
1090 WORD wSimpleVk, wFixedVk, wVk2;
1096 BOOL bWasSimpleDown =
FALSE, bPostMsg =
TRUE, bIsSimpleDown;
1138 ERR(
"Kbd msg dropped by WH_KEYBOARD_LL hook\n");
1145 TRACE(
"HotKey Processed\n");
1149 wFixedVk =
IntFixVk(wSimpleVk, bExt);
1155 TRACE(
"ProcessKeyEvent Q 0x%p Active pWnd 0x%p Focus pWnd 0x%p\n",
1162 (wSimpleVk ==
VK_MENU && bMenuDownRecently) ||
1168 bMenuDownRecently =
FALSE;
1175 bMenuDownRecently =
TRUE;
1194 if (bIsSimpleDown && !bWasSimpleDown &&
1199 TRACE(
"Alt-Tab/Esc Pressed wParam %x\n",wVk);
1249 else if (pFocusQueue && bPostMsg)
1260 if (Wnd) pti = Wnd->
head.pti;
1264 Msg.wParam = wFixedVk & 0xFF;
1276 ERR(
"Set last input\n");
1306 TRACE(
"Posting keyboard msg %u wParam 0x%x lParam 0x%x\n",
Msg.message,
Msg.wParam,
Msg.lParam);
1307 if (!Wnd) {
ERR(
"Window is NULL\n");}
1316 WORD wScanCode, wVk;
1337 ERR(
"No keyboard layout!\n");
1344 wScanCode = pKbdInput->
wScan;
1346 if (pKbdInput->
dwFlags & KEYEVENTF_UNICODE)
1355 if (pKbdInput->
dwFlags & KEYEVENTF_SCANCODE)
1358 wVk =
IntVscToVk(wScanCode | (bExt ? 0xE000 : 0), pKbdTbl);
1364 wVk = pKbdInput->
wVk;
1372 if (pKbdInput->
time)
1399 HRAWINPUT hRawInput;
1400 RAWKEYBOARD kb = {0};
1407 kb.MakeCode = wScanCode & 0x7F;
1410 kb.Flags = RI_KEY_MAKE;
1412 kb.Flags = RI_KEY_BREAK;
1413 kb.VKey = wVk & 0xFF;
1421 kb.Flags |= RI_KEY_E1;
1425 kb.Flags |= RI_KEY_E0;
1438 Msg.hwnd = hwndTarget;
1459 WORD wScanCode, wVk;
1465 wScanCode = pKbdInputData->
MakeCode & 0x7F;
1467 wScanCode |= 0xE000;
1469 wScanCode |= 0xE100;
1490 TRACE(
"UserProcessKeyboardInput: %x (break: %u) -> %x\n",
1507 KbdInput.
wVk = wVk & 0xFF;
1508 KbdInput.
wScan = wScanCode & 0x7F;
1549 WCHAR wch[3] = { 0 };
1591 NewMsg.pt =
gpsi->ptCursor;
1592 NewMsg.hwnd = lpMsg->
hwnd;
1595 TRACE(
"Enter IntTranslateKbdMessage msg %s, vk %x\n",
1598 if (lpMsg->
wParam == VK_PACKET)
1611 sizeof(wch) /
sizeof(wch[0]),
1625 NewMsg.lParam = lpMsg->
lParam;
1628 for (
i = 0;
i <
cch; ++
i)
1630 TRACE(
"Msg: %x '%lc' (%04x) %08x\n", NewMsg.message, wch[
i], wch[
i], NewMsg.lParam);
1631 NewMsg.wParam = wch[
i];
1637 TRACE(
"Leave IntTranslateKbdMessage ret %d, cch %d, msg %x, wch %x\n",
1638 bResult,
cch, NewMsg.message, NewMsg.wParam);
1693 ERR(
"Wrong type value: %u\n",
Type);
1712 TRACE(
"Enter NtUserMapVirtualKeyEx\n");
1736 TRACE(
"Leave NtUserMapVirtualKeyEx, ret=%u\n",
ret);
1750 PBYTE pKeyStateUnsafe,
1757 BYTE afKeyState[256 * 2 / 8] = {0};
1763 TRACE(
"Enter NtUserSetKeyboardState\n");
1766 if (wScanCode &
SC_KEY_UP || wVirtKey >= 0x100)
1768 ERR(
"Invalid parameter\n");
1776 for (
i = 0;
i < 256; ++
i)
1786 ERR(
"Cannot copy key state\n");
1795 ERR(
"ExAllocatePoolWithTag(%u) failed\n",
sizeof(
WCHAR) * cchBuff);
1828 ERR(
"No keyboard layout ?!\n");
1841 TRACE(
"Leave NtUserSetKeyboardState, ret=%i\n", iRet);
1862 WCHAR KeyNameBuf[2];
1864 TRACE(
"Enter NtUserGetKeyNameText\n");
1872 if (!pKbdTbl || cchSize < 1)
1874 ERR(
"Invalid parameter\n");
1890 pKeyNames = pKbdTbl->pKeyNamesExt;
1892 pKeyNames = pKbdTbl->pKeyNames;
1894 for (
i = 0; pKeyNames[
i].pwsz;
i++)
1896 if (pKeyNames[
i].vsc == wScanCode)
1898 pKeyName = pKeyNames[
i].pwsz;
1912 pKeyName = KeyNameBuf;
1918 cchKeyName =
wcslen(pKeyName);
1919 if (cchKeyName > (cchSize - 1UL))
1920 cchKeyName = cchSize - 1UL;
1942 TRACE(
"Leave NtUserGetKeyNameText, ret=%lu\n", dwRet);
1964 ERR(
"Unknown type!\n");
1984 PVK_TO_WCHARS10 pVkToWch;
1986 DWORD i, dwModBits = 0, dwModNumber = 0, Ret = (
DWORD)-1;
1988 TRACE(
"NtUserVkKeyScanEx() wch %u, KbdLayout 0x%p\n", wch, dwhkl);
2009 for (
i = 0; pKbdTbl->pVkToWcharTable[
i].pVkToWchars;
i++)
2011 pVkToWchTbl = &pKbdTbl->pVkToWcharTable[
i];
2012 pVkToWch = (PVK_TO_WCHARS10)(pVkToWchTbl->pVkToWchars);
2015 while (pVkToWch->VirtualKey)
2017 for (dwModNumber = 0; dwModNumber < pVkToWchTbl->
nModifications; dwModNumber++)
2019 if (pVkToWch->wch[dwModNumber] == wch)
2021 dwModBits = pKbdTbl->pCharModifiers->ModNumber[dwModNumber];
2022 TRACE(
"i %lu wC %04x: dwModBits %08x dwModNumber %08x MaxModBits %08x\n",
2023 i, wch, dwModBits, dwModNumber, pKbdTbl->pCharModifiers->wMaxModBits);
2024 Ret = (dwModBits << 8) | (pVkToWch->VirtualKey & 0xFF);
2028 pVkToWch = (PVK_TO_WCHARS10)(((
BYTE *)pVkToWch) + pVkToWchTbl->
cbSize);
#define DBG_DEFAULT_CHANNEL(ch)
#define IsCJKCodePage(CodePage)
#define STATUS_INVALID_HANDLE
#define STATUS_NOT_SUPPORTED
BOOL FASTCALL IntGdiDeleteDC(HDC, BOOL)
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
static void cleanup(void)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
#define EngGetTickCount32()
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define UserHMGetHandle(obj)
#define EXCEPTION_EXECUTE_HANDLER
#define MmCopyToCaller(x, y, z)
#define ExFreePoolWithTag(_P, _T)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
VOID FASTCALL IntCoalesceMouseMove(PTHREADINFO pti)
BOOL FASTCALL MsqPostMessage(PTHREADINFO pti, MSG *Msg, BOOLEAN HardwareMessage, DWORD MessageBits, DWORD dwQEvent, LONG_PTR ExtraInfo)
*BytesInUnicodeString PWCH _In_ ULONG _Out_opt_ PULONG BytesInUnicodeString
NTSYSAPI VOID NTAPI RtlGetDefaultCodePage(_Out_ PUSHORT AnsiCodePage, _Out_ PUSHORT OemCodePage)
*BytesInUnicodeString PWCH _In_ ULONG MaxBytesInUnicodeString
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
_Use_decl_annotations_ NTSTATUS NTAPI RtlMultiByteToUnicodeN(_Out_ PWCH UnicodeString, _In_ ULONG UnicodeSize, _Out_opt_ PULONG ResultSize, _In_ PCCH MbString, _In_ ULONG MbSize)
_Use_decl_annotations_ NTSTATUS NTAPI RtlOemToUnicodeN(_Out_ PWCHAR UnicodeString, _In_ ULONG UnicodeSize, _Out_opt_ PULONG ResultSize, _In_ PCCH OemString, _In_ ULONG OemSize)
#define _In_reads_bytes_(s)
#define _Out_writes_bytes_to_(s, c)
#define DEFAULT_UNREACHABLE
#define KEYBOARD_CAPS_LOCK_ON
#define IOCTL_KEYBOARD_QUERY_INDICATORS
#define IOCTL_KEYBOARD_SET_INDICATORS
struct _KEYBOARD_INDICATOR_TRANSLATION KEYBOARD_INDICATOR_TRANSLATION
#define IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION
#define KEYBOARD_SCROLL_LOCK_ON
#define KEYBOARD_NUM_LOCK_ON
NTSYSAPI NTSTATUS NTAPI ZwDeviceIoControlFile(IN HANDLE DeviceHandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, IN PVOID UserApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG IoControlCode, IN PVOID InputBuffer, IN ULONG InputBufferSize, OUT PVOID OutputBuffer, IN ULONG OutputBufferSize)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
LRESULT APIENTRY co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
PPROCESSINFO gppiInputProvider
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
struct _THREADINFO * PTHREADINFO
_Out_opt_ int _Out_opt_ int * cy
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
__kernel_entry W32KAPI HDC APIENTRY NtGdiCreateCompatibleDC(_In_opt_ HDC hdc)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiBitBlt(_In_ HDC hdcDst, _In_ INT x, _In_ INT y, _In_ INT cx, _In_ INT cy, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ DWORD rop4, _In_ DWORD crBackColor, _In_ FLONG fl)
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiSelectBitmap(_In_ HDC hdc, _In_ HBITMAP hbm)
#define MAPVK_VSC_TO_VK_EX
#define KEYEVENTF_EXTENDEDKEY
#define MAPVK_VK_TO_VSC_EX
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define STATUS_BUFFER_TOO_SMALL
KEYBOARD_ID KeyboardIdentifier
USHORT NumberOfFunctionKeys
INDICATOR_LIST IndicatorList[1]
USHORT NumberOfIndicatorKeys
struct _CLIENTINFO * pClientInfo
struct tagKL * KeyboardLayout
struct _USER_MESSAGE_QUEUE * MessageQueue
struct _KBDTABLES * pKbdTbl
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INSUFFICIENT_RESOURCES
PWND FASTCALL UserGetWindowObject(HWND hWnd)
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
PUSBUSER_REQUEST_HEADER Block
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_opt_ PCUNICODE_STRING UnicodeString
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
BOOL NTAPI UserEmptyClipboard(VOID)
BOOL NTAPI UserCloseClipboard(VOID)
BOOL NTAPI UserOpenClipboard(HWND hWnd)
HANDLE NTAPI UserSetClipboardData(UINT fmt, HANDLE hData, PSETCLIPBDATA scd)
HWND FASTCALL IntGetDesktopWindow(VOID)
PUSER_MESSAGE_QUEUE FASTCALL IntGetFocusMessageQueue(VOID)
BOOL NTAPI co_UserProcessHotKeys(WORD wVk, BOOL bIsDown)
static KEYBOARD_INDICATOR_PARAMETERS gIndicators
KEYBOARD_ATTRIBUTES gKeyboardInfo
static ULONG gAltNumPadValue
static DWORD IntGetModBits(PKBDTABLES pKbdTbl, PBYTE pKeyState)
static enum _ALTNUM_STATE gAltNumPadState
BOOL FASTCALL IntTranslateKbdMessage(LPMSG lpMsg, UINT flags)
VOID WINAPI UserRawInputProcessKeyboardInput(PINPUT_DEVICE_INFO pDeviceInfo, PKEYBOARD_INPUT_DATA pKbdInputData, WORD wScanCode, WORD wVk)
static NTSTATUS APIENTRY IntKeyboardUpdateLeds(HANDLE hKeyboardDevice, WORD wVk, WORD wScanCode)
DWORD APIENTRY NtUserVkKeyScanEx(WCHAR wch, HKL dwhkl, BOOL bUsehKL)
static INT gLayoutToggleKeyState
int APIENTRY NtUserToUnicodeEx(UINT wVirtKey, UINT wScanCode, PBYTE pKeyStateUnsafe, LPWSTR pwszBuffUnsafe, INT cchBuff, UINT wFlags, HKL dwhkl)
BYTE gafAsyncKeyState[256 *2/8]
BOOL NTAPI UserSendKeyboardInput(KEYBDINPUT *pKbdInput, BOOL bInjected)
static WORD IntFixVk(WORD wVk, BOOL bExt)
static VOID SnapWindow(HWND hWnd)
static BOOL IntTranslateChar(WORD wVirtKey, PBYTE pKeyState, PBOOL pbDead, PBOOL pbLigature, PWCHAR pwcTranslatedChar, PKBDTABLES pKbdTbl)
DWORD gdwLanguageToggleKey
static int APIENTRY IntToUnicodeEx(UINT wVirtKey, UINT wScanCode, PBYTE pKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags, PKBDTABLES pKbdTbl)
static WCHAR FASTCALL IntVkToChar(WORD wVk, PKBDTABLES pKbdTbl)
static BOOL IntCheckLanguageToggle(_In_ PUSER_MESSAGE_QUEUE pFocusQueue, _In_ BOOL bIsDown, _In_ WORD wVk, _Inout_ PINT pKeyState)
DWORD APIENTRY NtUserGetKeyNameText(LONG lParam, LPWSTR lpString, int cchSize)
static LRESULT co_CallLowLevelKeyboardHook(WORD wVk, WORD wScanCode, DWORD dwFlags, BOOL bInjected, DWORD dwTime, DWORD dwExtraInfo)
static PKL FASTCALL IntGetNextKL(_In_ PKL pKL, _In_ BOOL bNext, _In_ BOOL bSameLang)
static PKEYBOARD_INDICATOR_TRANSLATION gpKeyboardIndicatorTrans
static UINT IntMapVirtualKeyEx(UINT uCode, UINT Type, PKBDTABLES pKbdTbl)
VOID NTAPI UserInitKeyboard(HANDLE hKeyboardDevice)
static BOOL IntHandleAltNumpad(_In_ WORD wVk, _In_ BOOL bIsDown, _In_ DWORD dwTime)
Handles Alt+Numpad character composition.
NTSTATUS APIENTRY IntKeyboardGetIndicatorTrans(HANDLE hKeyboardDevice, PKEYBOARD_INDICATOR_TRANSLATION *ppIndicatorTrans)
static BYTE gafAsyncKeyStateRecentDown[256/8]
DWORD FASTCALL UserGetKeyboardType(DWORD dwTypeFlag)
static VOID NTAPI UpdateAsyncKeyState(WORD wVk, BOOL bIsDown)
SHORT APIENTRY NtUserGetAsyncKeyState(INT Key)
static INT gLanguageToggleKeyState
NTSTATUS NTAPI InitKeyboardImpl(VOID)
VOID NTAPI UserProcessKeyboardInput(PINPUT_DEVICE_INFO pDeviceInfo, PKEYBOARD_INPUT_DATA pKbdInputData)
BOOL NTAPI ProcessKeyEvent(WORD wVk, WORD wScanCode, DWORD dwFlags, BOOL bInjected, DWORD dwTime, DWORD dwExtraInfo)
static WORD FASTCALL IntVkToVsc(WORD wVk, PKBDTABLES pKbdTbl)
static WORD FASTCALL IntVscToVk(WORD wScanCode, PKBDTABLES pKbdTbl)
static VOID IntLanguageToggle(_In_ PUSER_MESSAGE_QUEUE pFocusQueue, _In_ BOOL bSameLang, _In_ INT nKeyState)
static WORD IntSimplifyVk(WORD wVk)
static WORD IntTranslateNumpadKey(WORD wVk)
UINT APIENTRY NtUserMapVirtualKeyEx(UINT uCode, UINT uType, DWORD keyboardId, HKL dwhkl)
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
PVOID FASTCALL UserAssignmentLock(PVOID *ppvObj, PVOID pvNew)
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)