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); + ret &= query_display_setting(hkey, "DefaultSettings.FixedOutput", &dm->dmDisplayFixedOutput); -#undef query_value - - 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_process_text_input(UINT vkey, UINT scan, UINT repeat, const B 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;