/* FUNCTIONS ****************************************************************/
+extern __declspec(noreturn)
+VOID CALLBACK ConsoleControlDispatcher(DWORD CodeAndFlag);
+
__declspec(dllimport)
PRTL_BASE_PROCESS_START_ROUTINE RtlBaseProcessStartRoutine;
}
}
+
+/*
+ * @implemented
+ */
BOOL STDCALL CreateProcessA
(
LPCSTR lpApplicationName,
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);
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);
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
CreateProcessW
(
{
HANDLE hSection, hProcess, hThread;
NTSTATUS Status;
- LPTHREAD_START_ROUTINE lpStartAddress = NULL;
WCHAR ImagePathName[256];
UNICODE_STRING ImagePathName_U;
PROCESS_BASIC_INFORMATION ProcessBasicInfo;
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];
{
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.
dwCreationFlags |= DETACHED_PROCESS;
}
CsrRequest.Data.CreateProcessRequest.Flags = dwCreationFlags;
+ CsrRequest.Data.CreateProcessRequest.CtrlDispatcher = ConsoleControlDispatcher;
Status = CsrClientCallServer(&CsrRequest,
&CsrReply,
sizeof(CSRSS_API_REQUEST),