* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* PURPOSE: Video initialization and display settings
- * FILE: subsystems/win32/win32k/ntuser/display.c
+ * FILE: win32ss/user/ntuser/display.c
* PROGRAMER: Timo Kreuzer (timo.kreuzer@reactos.org)
*/
DBG_DEFAULT_CHANNEL(UserDisplay);
BOOL gbBaseVideo = 0;
+static PPROCESSINFO gpFullscreen = NULL;
static const PWCHAR KEY_VIDEO = L"\\Registry\\Machine\\HARDWARE\\DEVICEMAP\\VIDEO";
TRACE("Enter NtUserEnumDisplaySettings(%wZ, %lu, %p, 0x%lx)\n",
pustrDevice, iModeNum, lpDevMode, dwFlags);
+ _SEH2_TRY
+ {
+ ProbeForWrite(lpDevMode, sizeof(DEVMODEW), 1);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ _SEH2_YIELD(return _SEH2_GetExceptionCode());
+ }
+ _SEH2_END
+
+ if (lpDevMode->dmSize != sizeof(DEVMODEW))
+ {
+ return STATUS_BUFFER_TOO_SMALL;
+ }
+
if (pustrDevice)
{
+ if (pustrDevice->Buffer == NULL || pustrDevice->Length == 0)
+ {
+ Status = STATUS_INVALID_PARAMETER_1;
+ }
+
/* Initialize destination string */
RtlInitEmptyUnicodeString(&ustrDevice, awcDevice, sizeof(awcDevice));
}
_SEH2_END;
}
+ else
+ {
+ if (Status == STATUS_UNSUCCESSFUL)
+ {
+ Status = STATUS_INVALID_PARAMETER_1;
+ }
+ }
return Status;
}
+VOID
+UserUpdateFullscreen(
+ DWORD flags)
+{
+ if (flags & CDS_FULLSCREEN)
+ gpFullscreen = gptiCurrent->ppi;
+ else
+ gpFullscreen = NULL;
+}
LONG
APIENTRY
goto leave;
}
+ UserUpdateFullscreen(flags);
+
/* Update the system metrics */
InitMetrics();
return lResult;
}
+VOID
+UserDisplayNotifyShutdown(
+ PPROCESSINFO ppiCurrent)
+{
+ if (ppiCurrent == gpFullscreen)
+ {
+ UserChangeDisplaySettings(NULL, NULL, 0, NULL);
+ if (gpFullscreen)
+ ERR("Failed to restore display mode!\n");
+ }
+}
+
LONG
APIENTRY
NtUserChangeDisplaySettings(