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