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)