Rebase against 161d61481f5d5ab8ee0b6237853af830e992afb1.

This commit is contained in:
Alistair Leslie-Hughes
2021-11-18 11:20:26 +11:00
parent 0ee2ac8499
commit 7e42d0ac1a
7 changed files with 105 additions and 625 deletions

View File

@@ -1,4 +1,4 @@
From 0572bef41d224ebb69c6c3fd647bddf844a3a29d Mon Sep 17 00:00:00 2001
From 8db4007bfa0d09e3d75d00a48b7762e9ec746357 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 9 Jul 2019 14:13:28 +1000
Subject: [PATCH] user32: Do not enumerate the registry in
@@ -7,70 +7,28 @@ Subject: [PATCH] user32: Do not enumerate the registry in
This function returns the current list of *installed* Keyboard layouts
not the complete list from the registry.
---
dlls/user32/input.c | 32 +++-----------------------------
dlls/user32/tests/input.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 29 deletions(-)
dlls/user32/input.c | 1 -
dlls/user32/tests/input.c | 35 +++++++++++++++++++++++++++++++
dlls/win32u/input.c | 43 +--------------------------------------
3 files changed, 36 insertions(+), 43 deletions(-)
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 97be83369d9..42145c13105 100644
index 7349d865f01..23ef817ff29 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -1336,9 +1336,7 @@ BOOL WINAPI BlockInput(BOOL fBlockIt)
*/
UINT WINAPI GetKeyboardLayoutList( INT size, HKL *layouts )
{
- WCHAR klid[KL_NAMELENGTH], value[5];
- DWORD value_size, count, tmp, i = 0;
- HKEY hkey;
+ DWORD count;
HKL layout;
TRACE_(keyboard)( "size %d, layouts %p.\n", size, layouts );
@@ -1346,37 +1344,13 @@ UINT WINAPI GetKeyboardLayoutList( INT size, HKL *layouts )
if ((count = USER_Driver->pGetKeyboardLayoutList( size, layouts )) != ~0) return count;
layout = get_locale_kbd_layout();
- count = 0;
- count++;
if (size && layouts)
{
- layouts[count - 1] = layout;
- if (count == size) return count;
+ layouts[0] = layout;
}
- if (!RegOpenKeyW( HKEY_LOCAL_MACHINE, L"System\\CurrentControlSet\\Control\\Keyboard Layouts", &hkey ))
- {
- while (!RegEnumKeyW( hkey, i++, klid, ARRAY_SIZE(klid) ))
- {
- tmp = wcstoul( klid, NULL, 16 );
- value_size = sizeof(value);
- if (!RegGetValueW( hkey, klid, L"Layout Id", RRF_RT_REG_SZ, NULL, (void *)&value, &value_size ))
- tmp = MAKELONG( LOWORD( tmp ), 0xf000 | (wcstoul( value, NULL, 16 ) & 0xfff) );
-
- if (layout == UlongToHandle( tmp )) continue;
-
- count++;
- if (size && layouts)
- {
- layouts[count - 1] = UlongToHandle( tmp );
- if (count == size) break;
- }
- }
- RegCloseKey( hkey );
- }
-
- return count;
+ return 1;
@@ -883,7 +883,6 @@ BOOL WINAPI BlockInput(BOOL fBlockIt)
return FALSE;
}
-
/***********************************************************************
* RegisterHotKey (USER32.@)
*/
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
index c4c361575cd..070c22a4349 100644
index 79f3dfc3dc0..b3c1bd560ae 100644
--- a/dlls/user32/tests/input.c
+++ b/dlls/user32/tests/input.c
@@ -4363,6 +4363,40 @@ static void test_SendInput(void)
@@ -4481,6 +4481,40 @@ static void test_SendInput(void)
DestroyWindow( hwnd );
}
@@ -111,7 +69,7 @@ index c4c361575cd..070c22a4349 100644
START_TEST(input)
{
char **argv;
@@ -4405,6 +4439,7 @@ START_TEST(input)
@@ -4523,6 +4557,7 @@ START_TEST(input)
test_GetRawInputBuffer();
test_RegisterRawInputDevices();
test_rawinput(argv[0]);
@@ -119,6 +77,69 @@ index c4c361575cd..070c22a4349 100644
if(pGetMouseMovePointsEx)
test_GetMouseMovePointsEx(argv[0]);
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index bc3cd17a29e..4ae1b0c900f 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -611,23 +611,9 @@ HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags )
*/
UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
{
- char buffer[4096];
- KEY_NODE_INFORMATION *key_info = (KEY_NODE_INFORMATION *)buffer;
- KEY_VALUE_PARTIAL_INFORMATION *value_info = (KEY_VALUE_PARTIAL_INFORMATION *)buffer;
- DWORD count, tmp, i = 0;
- HKEY hkey, subkey;
+ DWORD count;
HKL layout;
- static const WCHAR keyboard_layouts_keyW[] =
- {
- '\\','R','e','g','i','s','t','r','y',
- '\\','M','a','c','h','i','n','e',
- '\\','S','y','s','t','e','m',
- '\\','C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t',
- '\\','C','o','n','t','r','o','l',
- '\\','K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','s'
- };
-
TRACE_(keyboard)( "size %d, layouts %p.\n", size, layouts );
if ((count = user_driver->pGetKeyboardLayoutList( size, layouts )) != ~0) return count;
@@ -639,33 +625,6 @@ UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
if (size && layouts)
{
layouts[count - 1] = layout;
- if (count == size) return count;
- }
-
- if ((hkey = reg_open_key( NULL, keyboard_layouts_keyW, sizeof(keyboard_layouts_keyW) )))
- {
- while (!NtEnumerateKey( hkey, i++, KeyNodeInformation, key_info,
- sizeof(buffer) - sizeof(WCHAR), &tmp ))
- {
- if (!(subkey = reg_open_key( hkey, key_info->Name, key_info->NameLength ))) continue;
- key_info->Name[key_info->NameLength / sizeof(WCHAR)] = 0;
- tmp = wcstoul( key_info->Name, NULL, 16 );
- if (query_reg_ascii_value( subkey, "Layout Id", value_info, sizeof(buffer) ) &&
- value_info->Type == REG_SZ)
- tmp = MAKELONG( LOWORD( tmp ),
- 0xf000 | (wcstoul( (const WCHAR *)value_info->Data, NULL, 16 ) & 0xfff) );
- NtClose( subkey );
-
- if (layout == UlongToHandle( tmp )) continue;
-
- count++;
- if (size && layouts)
- {
- layouts[count - 1] = UlongToHandle( tmp );
- if (count == size) break;
- }
- }
- NtClose( hkey );
}
return count;
--
2.30.2
2.33.0