server: Define an architecture-independent structure for process startup info.
diff --git a/server/trace.c b/server/trace.c
index be3f1c6..38a20b7 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -675,65 +675,38 @@
}
/* 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, data_size_t size )
+static data_size_t dump_inline_unicode_string( const char *prefix, data_size_t pos, data_size_t len, data_size_t total_size )
{
- size_t length = str->Length;
- 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/sizeof(WCHAR), stderr, "\"\"" );
+ fputs( prefix, stderr );
+ if (pos >= total_size) return pos;
+ if (len > total_size - pos) len = total_size - pos;
+ len /= sizeof(WCHAR);
+ dump_strW( (const WCHAR *)cur_data + pos/sizeof(WCHAR), len, stderr, "\"\"" );
+ return pos + len * sizeof(WCHAR);
}
static void dump_varargs_startup_info( const char *prefix, data_size_t size )
{
- const RTL_USER_PROCESS_PARAMETERS *ptr = cur_data;
- RTL_USER_PROCESS_PARAMETERS params;
+ startup_info_t info;
+ data_size_t pos = sizeof(info);
- if (size < sizeof(params.Size))
- {
- fprintf( stderr, "%s{}", prefix );
- return;
- }
- if (size > ptr->Size) size = ptr->Size;
- memset( ¶ms, 0, sizeof(params) );
- memcpy( ¶ms, ptr, min( size, sizeof(params) ));
+ memset( &info, 0, sizeof(info) );
+ memcpy( &info, cur_data, min( size, sizeof(info) ));
- fprintf( stderr, "%s{AllocationSize=%x,", prefix, params.AllocationSize );
- fprintf( stderr, "Size=%x,", params.Size );
- fprintf( stderr, "Flags=%x,", params.Flags );
- fprintf( stderr, "DebugFlags=%x,", params.DebugFlags );
- fprintf( stderr, "ConsoleHandle=%p,", params.ConsoleHandle );
- fprintf( stderr, "ConsoleFlags=%x,", params.ConsoleFlags );
- fprintf( stderr, "hStdInput=%p,", params.hStdInput );
- fprintf( stderr, "hStdOutput=%p,", params.hStdOutput );
- fprintf( stderr, "hStdError=%p,", params.hStdError );
- fprintf( stderr, "CurrentDirectory.Handle=%p,", params.CurrentDirectory.Handle );
- fprintf( stderr, "dwX=%d,", params.dwX );
- fprintf( stderr, "dwY=%d,", params.dwY );
- fprintf( stderr, "dwXSize=%d,", params.dwXSize );
- fprintf( stderr, "dwYSize=%d,", params.dwYSize );
- fprintf( stderr, "dwXCountChars=%d,", params.dwXCountChars );
- fprintf( stderr, "dwYCountChars=%d,", params.dwYCountChars );
- fprintf( stderr, "dwFillAttribute=%x,", params.dwFillAttribute );
- fprintf( stderr, "dwFlags=%x,", params.dwFlags );
- fprintf( stderr, "wShowWindow=%x,", params.wShowWindow );
- fprintf( stderr, "CurrentDirectory.DosPath=L\"" );
- dump_inline_unicode_string( ¶ms.CurrentDirectory.DosPath, 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,
+ "%s{debug_flags=%x,console_flags=%x,console=%04x,hstdin=%04x,hstdout=%04x,hstderr=%04x,"
+ "x=%u,y=%u,xsize=%u,ysize=%u,xchars=%u,ychars=%u,attribute=%02x,flags=%x,show=%u",
+ prefix, info.debug_flags, info.console_flags, info.console,
+ info.hstdin, info.hstdout, info.hstderr, info.x, info.y, info.xsize, info.ysize,
+ info.xchars, info.ychars, info.attribute, info.flags, info.show );
+ pos = dump_inline_unicode_string( ",curdir=L\"", pos, info.curdir_len, size );
+ pos = dump_inline_unicode_string( "\",dllpath=L\"", pos, info.dllpath_len, size );
+ pos = dump_inline_unicode_string( "\",imagepath=L\"", pos, info.imagepath_len, size );
+ pos = dump_inline_unicode_string( "\",cmdline=L\"", pos, info.cmdline_len, size );
+ pos = dump_inline_unicode_string( "\",title=L\"", pos, info.title_len, size );
+ pos = dump_inline_unicode_string( "\",desktop=L\"", pos, info.desktop_len, size );
+ pos = dump_inline_unicode_string( "\",shellinfo=L\"", pos, info.shellinfo_len, size );
+ pos = dump_inline_unicode_string( "\",runtime=L\"", pos, info.runtime_len, size );
fprintf( stderr, "\"}" );
remove_data( size );
}
@@ -1025,14 +998,12 @@
fprintf( stderr, ", create_flags=%08x", req->create_flags );
fprintf( stderr, ", socket_fd=%d", req->socket_fd );
fprintf( stderr, ", exe_file=%04x", req->exe_file );
- fprintf( stderr, ", hstdin=%04x", req->hstdin );
- fprintf( stderr, ", hstdout=%04x", req->hstdout );
- fprintf( stderr, ", hstderr=%04x", req->hstderr );
fprintf( stderr, ", process_access=%08x", req->process_access );
fprintf( stderr, ", process_attr=%08x", req->process_attr );
fprintf( stderr, ", thread_access=%08x", req->thread_access );
fprintf( stderr, ", thread_attr=%08x", req->thread_attr );
- dump_varargs_startup_info( ", info=", cur_size );
+ fprintf( stderr, ", info_size=%u", req->info_size );
+ dump_varargs_startup_info( ", info=", min(cur_size,req->info_size) );
dump_varargs_unicode_str( ", env=", cur_size );
}
@@ -1077,10 +1048,8 @@
static void dump_get_startup_info_reply( const struct get_startup_info_reply *req )
{
fprintf( stderr, " exe_file=%04x", req->exe_file );
- fprintf( stderr, ", hstdin=%04x", req->hstdin );
- fprintf( stderr, ", hstdout=%04x", req->hstdout );
- fprintf( stderr, ", hstderr=%04x", req->hstderr );
- dump_varargs_startup_info( ", info=", cur_size );
+ fprintf( stderr, ", info_size=%u", req->info_size );
+ dump_varargs_startup_info( ", info=", min(cur_size,req->info_size) );
dump_varargs_unicode_str( ", env=", cur_size );
}