Changes partly based on a patch and ideas by Gregor Brunmar <gregor.brunmar@home...
authorAleksey Bragin <aleksey@reactos.org>
Sun, 9 Sep 2007 11:04:22 +0000 (11:04 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Sun, 9 Sep 2007 11:04:22 +0000 (11:04 +0000)
- 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

index bd61f3d..3a807b8 100644 (file)
@@ -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 ||