[PATCH] kernel32: Launch 32-bit IL-only as 64-bit in WIN64
Brendan McGrath
brendan at redmandi.com
Sat Feb 9 19:00:43 CST 2019
When using CreateProcessA to execute a 32-bit .NET/Mono application
(which is IL-only) the process is always launched as a 32-bit process
under Wine; but under Windows it is launched as a 64-bit process.
This patch changes Wine's behaviour to match Windows.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46319
Signed-off-by: Brendan McGrath <brendan at redmandi.com>
---
dlls/kernel32/process.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 26c576e4f0..a118d4798d 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -2052,6 +2052,9 @@ static pid_t spawn_loader( const RTL_USER_PROCESS_PARAMETERS *params, int socket
argv = build_argv( ¶ms->CommandLine, 1 );
if (!is_win64 ^ !is_64bit_arch( pe_info->cpu ))
+#ifdef _WIN64
+ if ( !(pe_info->image_flags & IMAGE_FLAGS_ComPlusNativeReady) )
+#endif
loader = get_alternate_loader( &wineloader );
wine_server_handle_to_fd( params->hStdInput, FILE_READ_DATA, &stdin_fd, NULL );
@@ -2355,6 +2358,11 @@ static BOOL create_process( HANDLE hFile, LPSECURITY_ATTRIBUTES psa, LPSECURITY_
req->socket_fd = socketfd[1];
req->exe_file = wine_server_obj_handle( hFile );
req->access = PROCESS_ALL_ACCESS;
+#ifdef _WIN64
+ if (pe_info->image_flags & IMAGE_FLAGS_ComPlusNativeReady)
+ req->cpu = CPU_x86_64;
+ else
+#endif
req->cpu = pe_info->cpu;
req->info_size = startup_info_size;
wine_server_add_data( req, objattr, attr_len );
--
2.17.1
More information about the wine-devel
mailing list