Author: janderwald Date: Sat Aug 12 18:10:31 2006 New Revision: 23547
URL: http://svn.reactos.org/svn/reactos?rev=23547&view=rev Log: * put application name in quotes when lpCommandLine is != NULL
Modified: trunk/reactos/dll/win32/kernel32/process/create.c
Modified: trunk/reactos/dll/win32/kernel32/process/create.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/process/... ============================================================================== --- trunk/reactos/dll/win32/kernel32/process/create.c (original) +++ trunk/reactos/dll/win32/kernel32/process/create.c Sat Aug 12 18:10:31 2006 @@ -673,7 +673,7 @@ * key (see http://blogs.msdn.com/oldnewthing/archive/2005/12/19/505449.aspx) */
- DPRINT("CreateProcessW: lpApplicationName: %S lpCommandLine: %S" + DPRINT1("CreateProcessW: lpApplicationName: %S lpCommandLine: %S" " lpEnvironment: %p lpCurrentDirectory: %S dwCreationFlags: %lx\n", lpApplicationName, lpCommandLine, lpEnvironment, lpCurrentDirectory, dwCreationFlags); @@ -1226,6 +1226,64 @@ }
DPRINT("Quoted CmdLine: %S\n", QuotedCmdLine); + } + else if(lpApplicationName && lpCommandLine) + { + int len; + int Size = 0; + WCHAR * AppName; + + AppName = wcsrchr(lpApplicationName, L'\'); + if (AppName) + { + AppName++; + } + else + { + AppName = (WCHAR*)lpApplicationName; + } + + len = wcslen(AppName); + if (!_wcsnicmp(AppName, lpCommandLine, len-4) && lpCommandLine[len-4] == L' ') + { + /* remove application name */ + NullBuffer = wcschr(lpCommandLine, L' '); + } + else + { + NullBuffer = (WCHAR*)lpCommandLine; + } + + if (NullBuffer) + { + Size = wcslen(NullBuffer) + 1; + } + + /* Allocate a buffer */ + QuotedCmdLine = RtlAllocateHeap(RtlGetProcessHeap(), + 0, + (Size + wcslen(lpApplicationName) + 2 + 1) * + sizeof(WCHAR)); + if (QuotedCmdLine == NULL) + { + DPRINT1("Cannot allocate memory for quoted command line\n"); + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + goto Cleanup; + } + + /* Copy the first quote */ + wcscpy(QuotedCmdLine, L"""); + + /* Add the command line and the finishing quote */ + wcscat(QuotedCmdLine, lpApplicationName); + wcscat(QuotedCmdLine, L"""); + + if (Size) + { + wcscat(QuotedCmdLine, L" "); + wcscat(QuotedCmdLine, NullBuffer); + } + lpCommandLine = QuotedCmdLine; }
if (Escape)