Jacek Caban : winemac: Directly use ntdll for querying display settings.
Alexandre Julliard
julliard at winehq.org
Tue May 17 15:37:22 CDT 2022
Module: wine
Branch: master
Commit: ffa7c40951b1b2bae747c87a88d253be3bc3936b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ffa7c40951b1b2bae747c87a88d253be3bc3936b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri May 13 16:00:55 2022 +0200
winemac: Directly use ntdll for querying display settings.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winemac.drv/display.c | 45 ++++++++++++++++++++++++------------------
dlls/winemac.drv/macdrv.h | 5 +++++
dlls/winemac.drv/macdrv_main.c | 2 +-
3 files changed, 32 insertions(+), 20 deletions(-)
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c
index 8e616652198..d81b0d5f606 100644
--- a/dlls/winemac.drv/display.c
+++ b/dlls/winemac.drv/display.c
@@ -117,12 +117,27 @@ static BOOL get_display_device_reg_key(const WCHAR *device_name, WCHAR *key, uns
}
+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)
{
WCHAR wine_mac_reg_key[MAX_PATH];
HANDLE mutex;
HKEY hkey;
- DWORD type, size;
BOOL ret = TRUE;
dm->dmFields = 0;
@@ -140,32 +155,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->dmDisplayFlags);
+ ret &= query_display_setting(hkey, "DefaultSettings.Flags", &dm->dmDisplayFlags);
dm->dmFields |= DM_DISPLAYFLAGS;
- query_value("DefaultSettings.XPanning", &dm->dmPosition.x);
- query_value("DefaultSettings.YPanning", &dm->dmPosition.y);
+ ret &= query_display_setting(hkey, "DefaultSettings.XPanning", (DWORD *)&dm->dmPosition.x);
+ ret &= query_display_setting(hkey, "DefaultSettings.YPanning", (DWORD *)&dm->dmPosition.y);
dm->dmFields |= DM_POSITION;
- query_value("DefaultSettings.Orientation", &dm->dmDisplayOrientation);
+ ret &= query_display_setting(hkey, "DefaultSettings.Orientation", &dm->dmDisplayOrientation);
dm->dmFields |= DM_DISPLAYORIENTATION;
- query_value("DefaultSettings.FixedOutput", &dm->dmDisplayFixedOutput);
-
-#undef query_value
+ ret &= query_display_setting(hkey, "DefaultSettings.FixedOutput", &dm->dmDisplayFixedOutput);
- RegCloseKey(hkey);
+ NtClose(hkey);
release_display_device_init_mutex(mutex);
return ret;
}
diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h
index bded3500bee..931561a8209 100644
--- a/dlls/winemac.drv/macdrv.h
+++ b/dlls/winemac.drv/macdrv.h
@@ -293,6 +293,11 @@ extern void macdrv_im_set_text(const macdrv_event *event) DECLSPEC_HIDDEN;
extern void macdrv_sent_text_input(const macdrv_event *event) DECLSPEC_HIDDEN;
extern BOOL query_ime_char_rect(macdrv_query* query) DECLSPEC_HIDDEN;
+/* registry helpers */
+
+extern ULONG query_reg_value(HKEY hkey, const WCHAR *name, KEY_VALUE_PARTIAL_INFORMATION *info,
+ ULONG size) DECLSPEC_HIDDEN;
+
/* string helpers */
static inline void ascii_to_unicode(WCHAR *dst, const char *src, size_t len)
diff --git a/dlls/winemac.drv/macdrv_main.c b/dlls/winemac.drv/macdrv_main.c
index fccd588c271..eb693ba968d 100644
--- a/dlls/winemac.drv/macdrv_main.c
+++ b/dlls/winemac.drv/macdrv_main.c
@@ -152,7 +152,7 @@ static HKEY open_hkcu_key(const char *name)
}
-static ULONG query_reg_value(HKEY hkey, const WCHAR *name, KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size)
+ULONG query_reg_value(HKEY hkey, const WCHAR *name, KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size)
{
UNICODE_STRING str;
More information about the wine-cvs
mailing list