[win32k] Add parameter checks for NtGdiSetVirtualResolution
authorGregor Schneider <grschneider@gmail.com>
Sat, 19 Dec 2009 18:57:27 +0000 (18:57 +0000)
committerGregor Schneider <grschneider@gmail.com>
Sat, 19 Dec 2009 18:57:27 +0000 (18:57 +0000)
svn path=/trunk/; revision=44656

reactos/subsystems/win32/win32k/objects/coord.c

index d85238a..e2a70c9 100644 (file)
@@ -1024,7 +1024,20 @@ NtGdiSetVirtualResolution(
     PDC dc;
     PDC_ATTR pdcattr;
 
     PDC dc;
     PDC_ATTR pdcattr;
 
-    // Need test types for zeros and non zeros
+    /* Check parameters (all zeroes resets to real resolution) */
+    if (cxVirtualDevicePixel == 0 && cyVirtualDevicePixel == 0 &&
+        cxVirtualDeviceMm == 0 && cyVirtualDeviceMm == 0)
+    {
+        cxVirtualDevicePixel = NtGdiGetDeviceCaps(hdc, HORZRES);
+        cyVirtualDevicePixel = NtGdiGetDeviceCaps(hdc, VERTRES);
+        cxVirtualDeviceMm = NtGdiGetDeviceCaps(hdc, HORZSIZE);
+        cyVirtualDeviceMm = NtGdiGetDeviceCaps(hdc, VERTSIZE);
+    }
+    else if (cxVirtualDevicePixel == 0 || cyVirtualDevicePixel == 0 || 
+             cxVirtualDeviceMm == 0 || cyVirtualDeviceMm == 0)
+    {
+        return FALSE;
+    }
 
     dc = DC_LockDc(hdc);
     if (!dc) return FALSE;
 
     dc = DC_LockDc(hdc);
     if (!dc) return FALSE;