Copy all the startup info to the new process.

svn path=/trunk/; revision=3394
This commit is contained in:
David Welch 2002-08-26 11:24:29 +00:00
parent 84a242512b
commit 87579ff3f0
3 changed files with 213 additions and 228 deletions

View file

@ -1,4 +1,4 @@
/* $Id: create.c,v 1.47 2002/08/08 17:54:12 dwelch Exp $
/* $Id: create.c,v 1.48 2002/08/26 11:24:28 dwelch Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
@ -892,6 +892,31 @@ CreateProcessW(LPCWSTR lpApplicationName,
}
}
/*
* Initialize some other fields in the PPB
*/
if (lpStartupInfo)
{
Ppb->Flags = lpStartupInfo->Flags;
if (Ppb->Flags & STARTF_USESHOWWINDOW)
{
Ppb->ShowWindowFlags = lpStartupInfo->wShowWindow;
}
else
{
Ppb->ShowWindowFlags = SW_SHOWDEFAULT;
}
Ppb->StartingX = Ppb->dwX;
Ppb->StartingY = Ppb->dwY;
Ppb->CountX = Ppb->dwXSize;
Ppb->CountY = Ppb->dwYSize;
Ppb->FillAttribute = Ppb->dwFillAttribute;
}
else
{
Ppb->Flags = 0;
}
/*
* Create Process Environment Block
*/

View file

@ -1,4 +1,4 @@
/* $Id: proc.c,v 1.43 2002/05/07 22:26:29 hbirr Exp $
/* $Id: proc.c,v 1.44 2002/08/26 11:24:28 dwelch Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
@ -477,18 +477,14 @@ GetStartupInfoA(LPSTARTUPINFOA lpStartupInfo)
}
BOOL
STDCALL
FlushInstructionCache (
HANDLE hProcess,
BOOL STDCALL
FlushInstructionCache (HANDLE hProcess,
LPCVOID lpBaseAddress,
DWORD dwSize
)
DWORD dwSize)
{
NTSTATUS errCode;
errCode = NtFlushInstructionCache (
hProcess,
errCode = NtFlushInstructionCache (hProcess,
(PVOID) lpBaseAddress,
dwSize);
if (!NT_SUCCESS(errCode))
@ -500,11 +496,8 @@ FlushInstructionCache (
}
VOID
STDCALL
ExitProcess (
UINT uExitCode
)
VOID STDCALL
ExitProcess (UINT uExitCode)
{
CSRSS_API_REQUEST CsrRequest;
CSRSS_API_REPLY CsrReply;
@ -521,7 +514,8 @@ ExitProcess (
sizeof(CSRSS_API_REPLY));
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrReply.Status))
{
DbgPrint("Failed to tell csrss about terminating process. Expect trouble.\n");
DbgPrint("Failed to tell csrss about terminating process. "
"Expect trouble.\n");
}
@ -530,19 +524,10 @@ ExitProcess (
}
WINBOOL
STDCALL
TerminateProcess (
HANDLE hProcess,
UINT uExitCode
)
WINBOOL STDCALL
TerminateProcess (HANDLE hProcess,
UINT uExitCode)
{
if (0 == hProcess)
{
SetLastError (ERROR_INVALID_HANDLE);
}
else
{
NTSTATUS Status = NtTerminateProcess (hProcess, uExitCode);
if (NT_SUCCESS(Status))
@ -550,85 +535,66 @@ TerminateProcess (
return TRUE;
}
SetLastErrorByStatus (Status);
}
return FALSE;
}
VOID
STDCALL
FatalAppExitA (
UINT uAction,
LPCSTR lpMessageText
)
VOID STDCALL
FatalAppExitA (UINT uAction,
LPCSTR lpMessageText)
{
UNICODE_STRING MessageTextU;
ANSI_STRING MessageText;
RtlInitAnsiString (& MessageText,
(LPSTR) lpMessageText);
RtlInitAnsiString (&MessageText, (LPSTR) lpMessageText);
RtlAnsiStringToUnicodeString (& MessageTextU,
& MessageText,
RtlAnsiStringToUnicodeString (&MessageTextU,
&MessageText,
TRUE);
FatalAppExitW (uAction,
MessageTextU.Buffer);
FatalAppExitW (uAction, MessageTextU.Buffer);
RtlFreeUnicodeString (&MessageTextU);
}
VOID
STDCALL
FatalAppExitW (
UINT uAction,
LPCWSTR lpMessageText
)
VOID STDCALL
FatalAppExitW (UINT uAction,
LPCWSTR lpMessageText)
{
return;
}
VOID
STDCALL
FatalExit (
int ExitCode
)
VOID STDCALL
FatalExit (int ExitCode)
{
ExitProcess(ExitCode);
}
DWORD
STDCALL
GetPriorityClass (
HANDLE hProcess
)
DWORD STDCALL
GetPriorityClass (HANDLE hProcess)
{
HANDLE hProcessTmp;
DWORD CsrPriorityClass = 0; // This tells CSRSS we want to GET it!
NTSTATUS Status;
Status = NtDuplicateObject (
GetCurrentProcess(),
Status =
NtDuplicateObject (GetCurrentProcess(),
hProcess,
GetCurrentProcess(),
& hProcessTmp,
&hProcessTmp,
(PROCESS_SET_INFORMATION | PROCESS_QUERY_INFORMATION),
FALSE,
0
);
0);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus (Status);
return (0); /* ERROR */
}
/* Ask CSRSS to set it */
CsrSetPriorityClass (
hProcessTmp,
& CsrPriorityClass
);
CsrSetPriorityClass (hProcessTmp, &CsrPriorityClass);
NtClose (hProcessTmp);
/* Translate CSR->W32 priorities */
switch (CsrPriorityClass)
@ -648,12 +614,9 @@ GetPriorityClass (
WINBOOL
STDCALL
SetPriorityClass (
HANDLE hProcess,
DWORD dwPriorityClass
)
WINBOOL STDCALL
SetPriorityClass (HANDLE hProcess,
DWORD dwPriorityClass)
{
HANDLE hProcessTmp;
DWORD CsrPriorityClass;
@ -677,25 +640,21 @@ SetPriorityClass (
SetLastError (ERROR_INVALID_PARAMETER);
return (FALSE);
}
Status = NtDuplicateObject (
GetCurrentProcess(),
Status =
NtDuplicateObject (GetCurrentProcess(),
hProcess,
GetCurrentProcess(),
& hProcessTmp,
&hProcessTmp,
(PROCESS_SET_INFORMATION | PROCESS_QUERY_INFORMATION),
FALSE,
0
);
0);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus (Status);
return (FALSE); /* ERROR */
}
/* Ask CSRSS to set it */
Status = CsrSetPriorityClass (
hProcessTmp,
& CsrPriorityClass
);
Status = CsrSetPriorityClass (hProcessTmp, &CsrPriorityClass);
NtClose (hProcessTmp);
if (!NT_SUCCESS(Status))
{
@ -706,11 +665,8 @@ SetPriorityClass (
}
DWORD
STDCALL
GetProcessVersion (
DWORD ProcessId
)
DWORD STDCALL
GetProcessVersion (DWORD ProcessId)
{
DWORD Version = 0;
PIMAGE_NT_HEADERS NtHeader = NULL;
@ -724,8 +680,8 @@ GetProcessVersion (
if (NULL != NtHeader)
{
Version =
(NtHeader->OptionalHeader.MajorOperatingSystemVersion << 16)
| (NtHeader->OptionalHeader.MinorOperatingSystemVersion);
(NtHeader->OptionalHeader.MajorOperatingSystemVersion << 16) |
(NtHeader->OptionalHeader.MinorOperatingSystemVersion);
}
}
else /* other process */

View file

@ -29,10 +29,10 @@ static inline struct debug_info *get_info(void)
tmp.str_pos = tmp.strings;
tmp.out_pos = tmp.output;
}
if (!GetProcessHeap()) return &tmp;
if (!RtlGetProcessHeap()) return &tmp;
/* setup the temp structure in case HeapAlloc wants to print something */
NtCurrentTeb()->WineDebugInfo = &tmp;
info = HeapAlloc( GetProcessHeap(), 0, sizeof(*info) );
info = RtlAllocateHeap( RtlGetProcessHeap(), 0, sizeof(*info) );
info->str_pos = info->strings;
info->out_pos = info->output;
NtCurrentTeb()->WineDebugInfo = info;
@ -202,8 +202,12 @@ int wine_dbg_vprintf( const char *format, va_list args )
else
{
char *pos = info->output;
char saved_ch;
p++;
write( 2, pos, p - pos );
saved_ch = *p;
*p = 0;
DbgPrint(pos);
*p = saved_ch;
/* move beginning of next line to start of buffer */
while ((*pos = *p++)) pos++;
info->out_pos = pos;