Author: gadamopoulos
Date: Mon Feb 20 10:51:07 2012
New Revision: 55745
URL:
http://svn.reactos.org/svn/reactos?rev=55745&view=rev
Log:
[win32k]
- Peb->ProcessParameters->DesktopInfo must be probed and captured with SEH before
used in win32k
Modified:
trunk/reactos/subsystems/win32/win32k/main/dllmain.c
Modified: trunk/reactos/subsystems/win32/win32k/main/dllmain.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ma…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/main/dllmain.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/main/dllmain.c [iso-8859-1] Mon Feb 20 10:51:07
2012
@@ -238,7 +238,7 @@
HWINSTA hWinSta = NULL;
PCLIENTINFO pci;
HDESK hDesk = NULL;
- PUNICODE_STRING DesktopPath;
+ UNICODE_STRING DesktopPath;
PDESKTOP pdesk;
PRTL_USER_PROCESS_PARAMETERS ProcessParams =
Process->Peb->ProcessParameters;
@@ -297,11 +297,24 @@
* inherit the thread desktop and process window station (if not yet
inherited) from the process startup
* info structure. See documentation of CreateProcess()
*/
- DesktopPath = (ProcessParams ? ((ProcessParams->DesktopInfo.Length > 0)
? &ProcessParams->DesktopInfo : NULL) : NULL);
+ Status = STATUS_UNSUCCESSFUL;
+ if(ProcessParams && ProcessParams->DesktopInfo.Length > 0)
+ {
+ Status = IntSafeCopyUnicodeStringTerminateNULL(&DesktopPath,
&ProcessParams->DesktopInfo);
+ }
+ if(!NT_SUCCESS(Status))
+ {
+ RtlInitUnicodeString(&DesktopPath, NULL);
+ }
+
Status = IntParseDesktopPath(Process,
- DesktopPath,
+ &DesktopPath,
&hWinSta,
&hDesk);
+
+ if (DesktopPath.Buffer)
+ ExFreePoolWithTag(DesktopPath.Buffer, TAG_STRING);
+
if(!NT_SUCCESS(Status))
{
ERR_CH(UserThread, "Failed to assign default dekstop and winsta to
process\n");
@@ -545,6 +558,7 @@
NT_ROF(InitKeyboardImpl());
NT_ROF(MsqInitializeImpl());
NT_ROF(InitTimerImpl());
+ NT_ROF(InitDCEImpl());
/* Initialize FreeType library */
if (!InitFontSupport())