Author: greatlrd
Date: Wed Apr 26 08:49:11 2006
New Revision: 21742
URL: 
http://svn.reactos.ru/svn/reactos?rev=21742&view=rev
Log:
[AUDIT] after looking through code no signs of reverse engineering were found.
BUG 1436 patch from w3seek : SMSS: make \SystemRoot\System32 the current directory for
started subsystems
Modified:
    trunk/reactos/base/system/smss/smapicomp.c   (props changed)
    trunk/reactos/base/system/smss/smapiexec.c   (contents, props changed)
    trunk/reactos/base/system/smss/smss.c   (props changed)
Propchange: trunk/reactos/base/system/smss/smapicomp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*
Modified: trunk/reactos/base/system/smss/smapiexec.c
URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/base/system/smss/smapiexec.…
==============================================================================
--- trunk/reactos/base/system/smss/smapiexec.c (original)
+++ trunk/reactos/base/system/smss/smapiexec.c Wed Apr 26 08:49:11 2006
@@ -27,6 +27,8 @@
 #define NDEBUG
 #include <debug.h>
+
+static const WCHAR szSystemDirectory[] = L"\\System32";
 /**********************************************************************
  * SmCreateUserProcess/5
@@ -55,6 +57,7 @@
 {
        UNICODE_STRING                  ImagePathString = {0};
        UNICODE_STRING                  CommandLineString = {0};
+        UNICODE_STRING                 SystemDirectory = {0};
        PRTL_USER_PROCESS_PARAMETERS    ProcessParameters = NULL;
        RTL_USER_PROCESS_INFORMATION            ProcessInfo = {0};
        PRTL_USER_PROCESS_INFORMATION           pProcessInfo = & ProcessInfo;
@@ -70,16 +73,55 @@
        RtlInitUnicodeString (& ImagePathString, ImagePath);
        RtlInitUnicodeString (& CommandLineString, CommandLine);
-       RtlCreateProcessParameters(& ProcessParameters,
-                                  & ImagePathString,
-                                  NULL,
-                                  NULL,
-                                  & CommandLineString,
-                                  SmSystemEnvironment,
-                                  NULL,
-                                  NULL,
-                                  NULL,
-                                  NULL);
+       SystemDirectory.MaximumLength = (wcslen(SharedUserData->NtSystemRoot) *
sizeof(WCHAR)) + sizeof(szSystemDirectory);
+       SystemDirectory.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
+                                                0,
+                                                SystemDirectory.MaximumLength);
+       if (SystemDirectory.Buffer == NULL)
+       {
+               Status = STATUS_NO_MEMORY;
+               DPRINT1("SM: %s: Allocating system directory string failed
(Status=0x%08lx)\n",
+                       __FUNCTION__, Status);
+               return Status;
+       }
+
+       Status = RtlAppendUnicodeToString(& SystemDirectory,
+                                         SharedUserData->NtSystemRoot);
+       if (!NT_SUCCESS(Status))
+       {
+               goto FailProcParams;
+       }
+
+       Status = RtlAppendUnicodeToString(& SystemDirectory,
+                                         szSystemDirectory);
+       if (!NT_SUCCESS(Status))
+       {
+               goto FailProcParams;
+       }
+
+
+       Status = RtlCreateProcessParameters(& ProcessParameters,
+                                           & ImagePathString,
+                                           NULL,
+                                           & SystemDirectory,
+                                           & CommandLineString,
+                                           SmSystemEnvironment,
+                                           NULL,
+                                           NULL,
+                                           NULL,
+                                           NULL);
+
+       RtlFreeHeap(RtlGetProcessHeap(),
+                   0,
+                   SystemDirectory.Buffer);
+
+       if (!NT_SUCCESS(Status))
+       {
+FailProcParams:
+               DPRINT1("SM: %s: Creating process parameters failed
(Status=0x%08lx)\n",
+                       __FUNCTION__, Status);
+               return Status;
+       }
        Status = RtlCreateUserProcess (& ImagePathString,
                                       OBJ_CASE_INSENSITIVE,
Propchange: trunk/reactos/base/system/smss/smapiexec.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*
Propchange: trunk/reactos/base/system/smss/smss.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*