Module: wine Branch: master Commit: bdbbc3467c24db07810e09f988c4498e7a8de3e2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=bdbbc3467c24db07810e09f98...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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; }