Converted process creation to Unicode.
diff --git a/server/trace.c b/server/trace.c
index dcfeb81..7b5b785 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -30,10 +30,11 @@
#include <sys/uio.h>
#endif
-
#include "windef.h"
#include "winbase.h"
#include "wincon.h"
+#include "winreg.h"
+#include "winternl.h"
#include "request.h"
#include "unicode.h"
@@ -294,41 +295,68 @@
remove_data( size );
}
+/* dump a unicode string contained in a buffer; helper for dump_varargs_startup_info */
+static void dump_inline_unicode_string( const UNICODE_STRING *str, const void *data, size_t size )
+{
+ size_t length = str->Length / sizeof(WCHAR);
+ size_t offset = (size_t)str->Buffer;
+
+ if (offset >= size) return;
+ if (offset + length > size) length = size - offset;
+ dump_strW( (const WCHAR *)data + offset/sizeof(WCHAR), length, stderr, "\"\"" );
+}
+
static void dump_varargs_startup_info( size_t size )
{
- const startup_info_t *ptr = cur_data;
- startup_info_t info;
+ const RTL_USER_PROCESS_PARAMETERS *ptr = cur_data;
+ RTL_USER_PROCESS_PARAMETERS params;
- if (size < sizeof(info.size))
+ if (size < sizeof(params.Size))
{
fprintf( stderr, "{}" );
return;
}
- if (size > ptr->size) size = ptr->size;
- memset( &info, 0, sizeof(info) );
- memcpy( &info, ptr, min( size, sizeof(info) ));
+ if (size > ptr->Size) size = ptr->Size;
+ memset( ¶ms, 0, sizeof(params) );
+ memcpy( ¶ms, ptr, min( size, sizeof(params) ));
- fprintf( stderr, "{size=%d", info.size );
- fprintf( stderr, ",x=%d", info.x );
- fprintf( stderr, ",y=%d", info.y );
- fprintf( stderr, ",cx=%d", info.cx );
- fprintf( stderr, ",cy=%d", info.cy );
- fprintf( stderr, ",x_chars=%d", info.x_chars );
- fprintf( stderr, ",y_chars=%d", info.y_chars );
- fprintf( stderr, ",attr=%d", info.attribute );
- fprintf( stderr, ",cmd_show=%d", info.cmd_show );
- fprintf( stderr, ",flags=%x", info.flags );
+ fprintf( stderr, "{AllocationSize=%lx,", params.AllocationSize );
+ fprintf( stderr, "Size=%lx,", params.Size );
+ fprintf( stderr, "Flags=%lx,", params.Flags );
+ fprintf( stderr, "DebugFlags=%lx,", params.DebugFlags );
+ fprintf( stderr, "Console=%p,", params.hConsole );
+ fprintf( stderr, "ProcessGroup=%lx,", params.ProcessGroup );
+ fprintf( stderr, "hStdInput=%p,", params.hStdInput );
+ fprintf( stderr, "hStdOutput=%p,", params.hStdOutput );
+ fprintf( stderr, "hStdError=%p,", params.hStdError );
+ fprintf( stderr, "CurrentDirectoryHandle=%p,", params.CurrentDirectoryHandle );
+ fprintf( stderr, "dwX=%ld,", params.dwX );
+ fprintf( stderr, "dwY=%ld,", params.dwY );
+ fprintf( stderr, "dwXSize=%ld,", params.dwXSize );
+ fprintf( stderr, "dwYSize=%ld,", params.dwYSize );
+ fprintf( stderr, "dwXCountChars=%ld,", params.dwXCountChars );
+ fprintf( stderr, "dwYCountChars=%ld,", params.dwYCountChars );
+ fprintf( stderr, "dwFillAttribute=%lx,", params.dwFillAttribute );
+ fprintf( stderr, "dwFlags=%lx,", params.dwFlags );
+ fprintf( stderr, "wShowWindow=%lx,", params.wShowWindow );
+ fprintf( stderr, "CurrentDirectoryName=L\"" );
+ dump_inline_unicode_string( ¶ms.CurrentDirectoryName, cur_data, size );
+ fprintf( stderr, "\",DllPath=L\"" );
+ dump_inline_unicode_string( ¶ms.DllPath, cur_data, size );
+ fprintf( stderr, "\",ImagePathName=L\"" );
+ dump_inline_unicode_string( ¶ms.ImagePathName, cur_data, size );
+ fprintf( stderr, "\",CommandLine=L\"" );
+ dump_inline_unicode_string( ¶ms.CommandLine, cur_data, size );
+ fprintf( stderr, "\",WindowTitle=L\"" );
+ dump_inline_unicode_string( ¶ms.WindowTitle, cur_data, size );
+ fprintf( stderr, "\",Desktop=L\"" );
+ dump_inline_unicode_string( ¶ms.Desktop, cur_data, size );
+ fprintf( stderr, "\",ShellInfo=L\"" );
+ dump_inline_unicode_string( ¶ms.ShellInfo, cur_data, size );
+ fprintf( stderr, "\",RuntimeInfo=L\"" );
+ dump_inline_unicode_string( ¶ms.RuntimeInfo, cur_data, size );
+ fprintf( stderr, "\"}" );
remove_data( size );
- fprintf( stderr, ",filename=" );
- /* FIXME: these should be unicode */
- dump_varargs_string( min(cur_size,info.filename_len) );
- fprintf( stderr, ",cmdline=" );
- dump_varargs_string( min(cur_size,info.cmdline_len) );
- fprintf( stderr, ",desktop=" );
- dump_varargs_string( min(cur_size,info.desktop_len) );
- fprintf( stderr, ",title=" );
- dump_varargs_string( min(cur_size,info.title_len) );
- fputc( '}', stderr );
}
static void dump_varargs_input_records( size_t size )