From 4a05c1e591df053543a60e0cfa5fe98691e0dff0 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 1 Nov 2007 17:06:49 +0000 Subject: [PATCH] - Fix a bug with incorrect handling of the keyboard layout pointer (which is HKL in fact in our current implementation). - Change the prototype to better match actual parameters usage. See issue #2787 for more details. svn path=/trunk/; revision=30046 --- reactos/include/reactos/win32k/ntuser.h | 4 ++-- reactos/subsystems/win32/win32k/include/input.h | 1 + reactos/subsystems/win32/win32k/ntuser/kbdlayout.c | 2 +- reactos/subsystems/win32/win32k/ntuser/keyboard.c | 11 ++++++----- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index 3e2f5699cb3..ad798885025 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -2356,8 +2356,8 @@ NtUserValidateTimerCallback( DWORD NTAPI NtUserVkKeyScanEx( - DWORD Unknown0, - DWORD Unknown1, + WCHAR wChar, + ULONG_PTR KeyboardLayout, DWORD Unknown2); DWORD diff --git a/reactos/subsystems/win32/win32k/include/input.h b/reactos/subsystems/win32/win32k/include/input.h index 790e0ec87be..a74ef1f1c8e 100644 --- a/reactos/subsystems/win32/win32k/include/input.h +++ b/reactos/subsystems/win32/win32k/include/input.h @@ -32,6 +32,7 @@ BOOL FASTCALL IntMouseInput(MOUSEINPUT *mi); BOOL FASTCALL IntKeyboardInput(KEYBDINPUT *ki); BOOL UserInitDefaultKeyboardLayout(); +PKBL UserHklToKbl(HKL hKl); #define ThreadHasInputAccess(W32Thread) \ (TRUE) diff --git a/reactos/subsystems/win32/win32k/ntuser/kbdlayout.c b/reactos/subsystems/win32/win32k/ntuser/kbdlayout.c index fedab0dd388..96c18bddc9f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/kbdlayout.c +++ b/reactos/subsystems/win32/win32k/ntuser/kbdlayout.c @@ -308,7 +308,7 @@ PKBL W32kGetDefaultKeyLayout(VOID) return pKbl; } -static PKBL UserHklToKbl(HKL hKl) +PKBL UserHklToKbl(HKL hKl) { PKBL pKbl = KBLList; do diff --git a/reactos/subsystems/win32/win32k/ntuser/keyboard.c b/reactos/subsystems/win32/win32k/ntuser/keyboard.c index 2c5bc9bd2d5..fa352f0949e 100644 --- a/reactos/subsystems/win32/win32k/ntuser/keyboard.c +++ b/reactos/subsystems/win32/win32k/ntuser/keyboard.c @@ -1007,12 +1007,11 @@ UserGetKeyboardType( DWORD STDCALL NtUserVkKeyScanEx( - DWORD wChar, - DWORD KeyboardLayout, + WCHAR wChar, + ULONG_PTR KeyboardLayout, DWORD Unknown2) { -/* FAXME: currently, this routine doesnt seem to need any locking */ - +/* FIXME: currently, this routine doesnt seem to need any locking */ PKBDTABLES KeyLayout; PVK_TO_WCHAR_TABLE vtwTbl; PVK_TO_WCHARS10 vkPtr; @@ -1020,9 +1019,11 @@ NtUserVkKeyScanEx( int nMod; DWORD CapsMod = 0, CapsState = 0; + DPRINT("NtUserVkKeyScanEx() wChar %d, KbdLayout 0x%p\n", wChar, KeyboardLayout); + if(!KeyboardLayout) return -1; - KeyLayout = (PKBDTABLES) KeyboardLayout; + KeyLayout = UserHklToKbl((HKL)KeyboardLayout)->KBTables; for (nMod = 0; KeyLayout->pVkToWcharTable[nMod].nModifications; nMod++) {