git://git.jankratochvil.net
/
reactos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
branch update for HEAD-2003091401
[reactos.git]
/
lib
/
kernel32
/
process
/
create.c
diff --git
a/lib/kernel32/process/create.c
b/lib/kernel32/process/create.c
index
f871c97
..
c88fde5
100644
(file)
--- a/
lib/kernel32/process/create.c
+++ b/
lib/kernel32/process/create.c
@@
-18,6
+18,9
@@
/* FUNCTIONS ****************************************************************/
/* FUNCTIONS ****************************************************************/
+extern __declspec(noreturn)
+VOID CALLBACK ConsoleControlDispatcher(DWORD CodeAndFlag);
+
__declspec(dllimport)
PRTL_BASE_PROCESS_START_ROUTINE RtlBaseProcessStartRoutine;
__declspec(dllimport)
PRTL_BASE_PROCESS_START_ROUTINE RtlBaseProcessStartRoutine;
@@
-93,6
+96,10
@@
VOID STDCALL RtlRosR32AttribsToNativeAttribsNamed
}
}
}
}
+
+/*
+ * @implemented
+ */
BOOL STDCALL CreateProcessA
(
LPCSTR lpApplicationName,
BOOL STDCALL CreateProcessA
(
LPCSTR lpApplicationName,
@@
-190,7
+197,7
@@
BOOL STDCALL CreateProcessA
ANSI_STRING strEnvVar;
/* scan the environment to calculate its Unicode size */
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);
{
/* 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 */
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);
{
/* convert the current variable */
RtlInitAnsiString(&strEnvVar, pcScan);
@@
-653,6
+660,9
@@
static NTSTATUS KlInitPeb
}
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
CreateProcessW
(
WINBOOL STDCALL
CreateProcessW
(
@@
-670,7
+680,6
@@
CreateProcessW
{
HANDLE hSection, hProcess, hThread;
NTSTATUS Status;
{
HANDLE hSection, hProcess, hThread;
NTSTATUS Status;
- LPTHREAD_START_ROUTINE lpStartAddress = NULL;
WCHAR ImagePathName[256];
UNICODE_STRING ImagePathName_U;
PROCESS_BASIC_INFORMATION ProcessBasicInfo;
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;
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];
UNICODE_STRING CurrentDirectory_U;
SECTION_IMAGE_INFORMATION Sii;
WCHAR TempCurrentDirectoryW[256];
@@
-935,12
+943,6
@@
CreateProcessW
{
if (lpStartupInfo->lpReserved2)
{
{
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.
/* 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;
dwCreationFlags |= DETACHED_PROCESS;
}
CsrRequest.Data.CreateProcessRequest.Flags = dwCreationFlags;
+ CsrRequest.Data.CreateProcessRequest.CtrlDispatcher = ConsoleControlDispatcher;
Status = CsrClientCallServer(&CsrRequest,
&CsrReply,
sizeof(CSRSS_API_REQUEST),
Status = CsrClientCallServer(&CsrRequest,
&CsrReply,
sizeof(CSRSS_API_REQUEST),