mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
- Duplicate the error handle in CreateProcessW.
- Fixed the size parameter in calls to SearchPathW. svn path=/trunk/; revision=4273
This commit is contained in:
parent
59798c6f34
commit
1768a37e66
1 changed files with 22 additions and 8 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $Id: create.c,v 1.61 2003/01/22 02:24:10 ekohl Exp $
|
||||
/* $Id: create.c,v 1.62 2003/03/09 21:38:40 hbirr Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
|
@ -199,7 +199,7 @@ BaseProcessStart(LPTHREAD_START_ROUTINE lpStartAddress,
|
|||
{
|
||||
UINT uExitCode = 0;
|
||||
|
||||
DPRINT("\nBaseProcessStart(..) - setting up exception frame.\n\n");
|
||||
DPRINT("BaseProcessStart(..) - setting up exception frame.\n");
|
||||
|
||||
__try1(_except_handler)
|
||||
{
|
||||
|
@ -208,7 +208,7 @@ BaseProcessStart(LPTHREAD_START_ROUTINE lpStartAddress,
|
|||
{
|
||||
}
|
||||
|
||||
DPRINT("\nBaseProcessStart(..) - cleaned up exception frame.\n\n");
|
||||
DPRINT("BaseProcessStart(..) - cleaned up exception frame.\n");
|
||||
|
||||
ExitThread(uExitCode);
|
||||
}
|
||||
|
@ -641,7 +641,7 @@ CreateProcessW(LPCWSTR lpApplicationName,
|
|||
{
|
||||
if (lpCommandLine[0] == L'"')
|
||||
{
|
||||
wcscpy(TempApplicationNameW, &lpCommandLine[0]);
|
||||
wcscpy(TempApplicationNameW, lpCommandLine + 1);
|
||||
s = wcschr(TempApplicationNameW, L'"');
|
||||
if (s == NULL)
|
||||
{
|
||||
|
@ -672,7 +672,7 @@ CreateProcessW(LPCWSTR lpApplicationName,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (!SearchPathW(NULL, TempApplicationNameW, NULL, sizeof(ImagePathName), ImagePathName, &s))
|
||||
if (!SearchPathW(NULL, TempApplicationNameW, NULL, sizeof(ImagePathName)/sizeof(WCHAR), ImagePathName, &s))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -688,7 +688,7 @@ CreateProcessW(LPCWSTR lpApplicationName,
|
|||
wcscat(TempCommandLineNameW, lpApplicationName);
|
||||
lpCommandLine = TempCommandLineNameW;
|
||||
wcscpy(TempApplicationNameW, L"cmd.exe");
|
||||
if (!SearchPathW(NULL, TempApplicationNameW, NULL, sizeof(ImagePathName), ImagePathName, &s))
|
||||
if (!SearchPathW(NULL, TempApplicationNameW, NULL, sizeof(ImagePathName)/sizeof(WCHAR), ImagePathName, &s))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -926,7 +926,7 @@ CreateProcessW(LPCWSTR lpApplicationName,
|
|||
/*
|
||||
* Get some information about the process
|
||||
*/
|
||||
ZwQueryInformationProcess(hProcess,
|
||||
NtQueryInformationProcess(hProcess,
|
||||
ProcessBasicInformation,
|
||||
&ProcessBasicInfo,
|
||||
sizeof(ProcessBasicInfo),
|
||||
|
@ -1007,7 +1007,21 @@ CreateProcessW(LPCWSTR lpApplicationName,
|
|||
}
|
||||
if (IsConsoleHandle(Ppb->hStdError))
|
||||
{
|
||||
Ppb->hStdError = CsrReply.Data.CreateProcessReply.OutputHandle;
|
||||
CsrRequest.Type = CSRSS_DUPLICATE_HANDLE;
|
||||
CsrRequest.Data.DuplicateHandleRequest.ProcessId = ProcessBasicInfo.UniqueProcessId;
|
||||
CsrRequest.Data.DuplicateHandleRequest.Handle = CsrReply.Data.CreateProcessReply.OutputHandle;
|
||||
Status = CsrClientCallServer(&CsrRequest,
|
||||
&CsrReply,
|
||||
sizeof(CSRSS_API_REQUEST),
|
||||
sizeof(CSRSS_API_REPLY));
|
||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrReply.Status))
|
||||
{
|
||||
Ppb->hStdError = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
Ppb->hStdError = CsrReply.Data.DuplicateHandleReply.Handle;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue