From 336ae5366e22154684089e0bb2ab4085a005cd2e Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sat, 12 Aug 2006 14:10:31 +0000 Subject: [PATCH] * put application name in quotes when lpCommandLine is != NULL svn path=/trunk/; revision=23547 --- reactos/dll/win32/kernel32/process/create.c | 60 ++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/kernel32/process/create.c b/reactos/dll/win32/kernel32/process/create.c index 5b6a19494c9..95930e6f05a 100644 --- a/reactos/dll/win32/kernel32/process/create.c +++ b/reactos/dll/win32/kernel32/process/create.c @@ -673,7 +673,7 @@ CreateProcessInternalW(HANDLE hToken, * 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); @@ -1227,6 +1227,64 @@ GetAppName: 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) {