branch update for HEAD-2003091401
[reactos.git] / lib / kernel32 / process / create.c
index f871c97..c88fde5 100644 (file)
@@ -18,6 +18,9 @@
 
 /* FUNCTIONS ****************************************************************/
 
+extern __declspec(noreturn) 
+VOID CALLBACK ConsoleControlDispatcher(DWORD CodeAndFlag);
+
 __declspec(dllimport)
 PRTL_BASE_PROCESS_START_ROUTINE RtlBaseProcessStartRoutine;
 
@@ -93,6 +96,10 @@ VOID STDCALL RtlRosR32AttribsToNativeAttribsNamed
  }
 }
 
+
+/*
+ * @implemented
+ */
 BOOL STDCALL CreateProcessA
 (
  LPCSTR lpApplicationName,
@@ -190,7 +197,7 @@ BOOL STDCALL CreateProcessA
   ANSI_STRING strEnvVar;
 
   /* scan the environment to calculate its Unicode size */
-  for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.MaximumLength)
+  for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.Length + sizeof(char))
   {
    /* add the size of the current variable */
    RtlInitAnsiString(&strEnvVar, pcScan);
@@ -222,7 +229,7 @@ BOOL STDCALL CreateProcessA
   wstrEnvVar.MaximumLength = nEnvLen;
 
   /* scan the environment to convert it */
-  for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.MaximumLength)
+  for(pcScan = lpEnvironment; *pcScan; pcScan += strEnvVar.Length + sizeof(char))
   {
    /* convert the current variable */
    RtlInitAnsiString(&strEnvVar, pcScan);
@@ -653,6 +660,9 @@ static NTSTATUS KlInitPeb
 }
 
 
+/*
+ * @implemented
+ */
 WINBOOL STDCALL 
 CreateProcessW
 (
@@ -670,7 +680,6 @@ CreateProcessW
 {
    HANDLE hSection, hProcess, hThread;
    NTSTATUS Status;
-   LPTHREAD_START_ROUTINE  lpStartAddress = NULL;
    WCHAR ImagePathName[256];
    UNICODE_STRING ImagePathName_U;
    PROCESS_BASIC_INFORMATION ProcessBasicInfo;
@@ -681,8 +690,7 @@ CreateProcessW
    CSRSS_API_REPLY CsrReply;
    CHAR ImageFileName[8];
    PWCHAR s, e;
-   ULONG i, len;
-   ANSI_STRING ProcedureName;
+   ULONG i;
    UNICODE_STRING CurrentDirectory_U;
    SECTION_IMAGE_INFORMATION Sii;
    WCHAR TempCurrentDirectoryW[256];
@@ -935,12 +943,6 @@ CreateProcessW
    {
       if (lpStartupInfo->lpReserved2)
       {
-         ULONG i, Count = *(ULONG*)lpStartupInfo->lpReserved2;
-         HANDLE * hFile;  
-        HANDLE hTemp;
-        PRTL_USER_PROCESS_PARAMETERS CurrPpb = NtCurrentPeb()->ProcessParameters;  
-
-
          /* FIXME:
          *    ROUND_UP(xxx,2) + 2 is a dirty hack. RtlCreateProcessParameters assumes that
          *    the runtimeinfo is a unicode string and use RtlCopyUnicodeString for duplication.
@@ -1034,6 +1036,7 @@ CreateProcessW
       dwCreationFlags |= DETACHED_PROCESS;
    }
    CsrRequest.Data.CreateProcessRequest.Flags = dwCreationFlags;
+   CsrRequest.Data.CreateProcessRequest.CtrlDispatcher = ConsoleControlDispatcher;
    Status = CsrClientCallServer(&CsrRequest, 
                                &CsrReply,
                                sizeof(CSRSS_API_REQUEST),