From b4bf4d4ce91d9fcc56db031c30cbfc5aaa4dc80d Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 9 Sep 2007 11:04:22 +0000 Subject: [PATCH] Changes partly based on a patch and ideas by Gregor Brunmar : - Fix size argument in calls to RegQueryValueEx() (if some fails, it may not be equal to sizeof(DWORD)). - If it's impossible to read settings from vmware's registry key, obtain current screen settings and pass them. svn path=/trunk/; revision=28970 --- reactos/base/setup/vmwinst/vmwinst.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/reactos/base/setup/vmwinst/vmwinst.c b/reactos/base/setup/vmwinst/vmwinst.c index bd61f3daa45..3a807b8f276 100644 --- a/reactos/base/setup/vmwinst/vmwinst.c +++ b/reactos/base/setup/vmwinst/vmwinst.c @@ -203,24 +203,39 @@ static BOOL LoadResolutionSettings(DWORD *ResX, DWORD *ResY, DWORD *ColDepth) { HKEY hReg; - DWORD Type, Size; + DWORD Type, Size = sizeof(DWORD); if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services\\vmx_svga\\Device0", 0, KEY_QUERY_VALUE, &hReg) != ERROR_SUCCESS) { - return FALSE; + DEVMODE CurrentDevMode; + + /* If this key is absent, just get current settings */ + memset(&CurrentDevMode, 0, sizeof(CurrentDevMode)); + CurrentDevMode.dmSize = sizeof(CurrentDevMode); + if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode) == TRUE) + { + *ColDepth = CurrentDevMode.dmBitsPerPel; + *ResX = CurrentDevMode.dmPelsWidth; + *ResY = CurrentDevMode.dmPelsHeight; + + return TRUE; + } } + if(RegQueryValueEx(hReg, L"DefaultSettings.BitsPerPel", 0, &Type, (BYTE*)ColDepth, &Size) != ERROR_SUCCESS || Type != REG_DWORD) { *ColDepth = 8; + Size = sizeof(DWORD); } if(RegQueryValueEx(hReg, L"DefaultSettings.XResolution", 0, &Type, (BYTE*)ResX, &Size) != ERROR_SUCCESS || Type != REG_DWORD) { *ResX = 640; + Size = sizeof(DWORD); } if(RegQueryValueEx(hReg, L"DefaultSettings.YResolution", 0, &Type, (BYTE*)ResY, &Size) != ERROR_SUCCESS ||