Jacek Caban : winex11: Directly use ntdll for registry access in read_registry_settings.
Alexandre Julliard
julliard at winehq.org
Mon Apr 11 15:54:59 CDT 2022
Module: wine
Branch: master
Commit: bdbbc3467c24db07810e09f988c4498e7a8de3e2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=bdbbc3467c24db07810e09f988c4498e7a8de3e2
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Apr 8 13:29:54 2022 +0200
winex11: Directly use ntdll for registry access in read_registry_settings.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winex11.drv/settings.c | 44 +++++++++++++++++++++++++-------------------
1 file changed, 25 insertions(+), 19 deletions(-)
diff --git a/dlls/winex11.drv/settings.c b/dlls/winex11.drv/settings.c
index f4fb450375b..61bdf1afd0f 100644
--- a/dlls/winex11.drv/settings.c
+++ b/dlls/winex11.drv/settings.c
@@ -267,11 +267,25 @@ static HKEY get_display_device_reg_key( const WCHAR *device_name )
return reg_open_key( NULL, buffer, lstrlenW(buffer) * sizeof(WCHAR) );
}
+static BOOL query_display_setting( HKEY hkey, const char *name, DWORD *ret )
+{
+ char buffer[1024];
+ WCHAR nameW[128];
+ KEY_VALUE_PARTIAL_INFORMATION *value = (void *)buffer;
+
+ asciiz_to_unicode( nameW, name );
+ if (query_reg_value( hkey, nameW, value, sizeof(buffer) ) != sizeof(DWORD) ||
+ value->Type != REG_DWORD)
+ return FALSE;
+
+ *ret = *(DWORD *)value->Data;
+ return TRUE;
+}
+
static BOOL read_registry_settings(const WCHAR *device_name, DEVMODEW *dm)
{
HANDLE mutex;
HKEY hkey;
- DWORD type, size;
BOOL ret = TRUE;
dm->dmFields = 0;
@@ -283,32 +297,24 @@ static BOOL read_registry_settings(const WCHAR *device_name, DEVMODEW *dm)
return FALSE;
}
-#define query_value(name, data) \
- size = sizeof(DWORD); \
- if (RegQueryValueExA(hkey, name, 0, &type, (LPBYTE)(data), &size) || \
- type != REG_DWORD || size != sizeof(DWORD)) \
- ret = FALSE
-
- query_value("DefaultSettings.BitsPerPel", &dm->dmBitsPerPel);
+ ret &= query_display_setting( hkey, "DefaultSettings.BitsPerPel", &dm->dmBitsPerPel );
dm->dmFields |= DM_BITSPERPEL;
- query_value("DefaultSettings.XResolution", &dm->dmPelsWidth);
+ ret &= query_display_setting( hkey, "DefaultSettings.XResolution", &dm->dmPelsWidth );
dm->dmFields |= DM_PELSWIDTH;
- query_value("DefaultSettings.YResolution", &dm->dmPelsHeight);
+ ret &= query_display_setting( hkey, "DefaultSettings.YResolution", &dm->dmPelsHeight );
dm->dmFields |= DM_PELSHEIGHT;
- query_value("DefaultSettings.VRefresh", &dm->dmDisplayFrequency);
+ ret &= query_display_setting( hkey, "DefaultSettings.VRefresh", &dm->dmDisplayFrequency );
dm->dmFields |= DM_DISPLAYFREQUENCY;
- query_value("DefaultSettings.Flags", &dm->u2.dmDisplayFlags);
+ ret &= query_display_setting( hkey, "DefaultSettings.Flags", &dm->u2.dmDisplayFlags );
dm->dmFields |= DM_DISPLAYFLAGS;
- query_value("DefaultSettings.XPanning", &dm->u1.s2.dmPosition.x);
- query_value("DefaultSettings.YPanning", &dm->u1.s2.dmPosition.y);
+ ret &= query_display_setting( hkey, "DefaultSettings.XPanning", (DWORD *)&dm->u1.s2.dmPosition.x );
+ ret &= query_display_setting( hkey, "DefaultSettings.YPanning", (DWORD *)&dm->u1.s2.dmPosition.y );
dm->dmFields |= DM_POSITION;
- query_value("DefaultSettings.Orientation", &dm->u1.s2.dmDisplayOrientation);
+ ret &= query_display_setting( hkey, "DefaultSettings.Orientation", &dm->u1.s2.dmDisplayOrientation );
dm->dmFields |= DM_DISPLAYORIENTATION;
- query_value("DefaultSettings.FixedOutput", &dm->u1.s2.dmDisplayFixedOutput);
+ ret &= query_display_setting( hkey, "DefaultSettings.FixedOutput", &dm->u1.s2.dmDisplayFixedOutput );
-#undef query_value
-
- RegCloseKey(hkey);
+ NtClose( hkey );
release_display_device_init_mutex(mutex);
return ret;
}
More information about the wine-cvs
mailing list