1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
From ebc9e0914f293952405e622e440a05a253b1b038 Mon Sep 17 00:00:00 2001
From: Vasiliy Stelmachenok <ventureo@cachyos.org>
Date: Sat, 19 Jul 2025 17:20:25 +0300
Subject: [PATCH] Add workarounds for game launchers
Based on Proton patch from Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Vasiliy Stelmachenok <ventureo@cachyos.org>
---
dlls/kernelbase/process.c | 57 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 56 insertions(+), 1 deletion(-)
diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c
index b75963fef1d..9b78606f1cc 100644
--- a/dlls/kernelbase/process.c
+++ b/dlls/kernelbase/process.c
@@ -502,6 +502,38 @@ done:
return ret;
}
+static const WCHAR *hack_append_command_line( const WCHAR *cmd )
+{
+ static const struct
+ {
+ const WCHAR *exe_name;
+ const WCHAR *append;
+ }
+ options[] =
+ {
+ {L"UplayWebCore.exe", L" --use-gl=swiftshader"},
+ {L"Paradox Launcher.exe", L" --use-gl=swiftshader --in-process-gpu"},
+ {L"\\EpicOnlineServicesUIHelper", L" --use-gl=desktop"},
+ {L"Battle.net.exe", L" --in-process-gpu"},
+ {L"RSI Launcher.exe", L" --in-process-gpu"},
+ {L"EADesktop.exe", L" --in-process-gpu"},
+ {L"launcher_epic.exe", L" --in-process-gpu"},
+ };
+ unsigned int i;
+
+ if (!cmd) return NULL;
+
+ for (i = 0; i < ARRAY_SIZE(options); ++i)
+ {
+ if (wcsstr( cmd, options[i].exe_name ))
+ {
+ FIXME( "HACK: appending %s to command line.\n", debugstr_w(options[i].append) );
+ return options[i].append;
+ }
+ }
+ return NULL;
+}
+
/**********************************************************************
* CreateProcessInternalW (kernelbase.@)
*/
@@ -518,6 +550,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
RTL_USER_PROCESS_PARAMETERS *params = NULL;
RTL_USER_PROCESS_INFORMATION rtl_info;
HANDLE parent = 0, debug = 0;
+ const WCHAR *append;
ULONG nt_flags = 0;
USHORT machine = 0;
NTSTATUS status;
@@ -539,7 +572,29 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessInternalW( HANDLE token, const WCHAR
}
else
{
- if (!(tidy_cmdline = get_file_name( cmd_line, name, ARRAY_SIZE(name) ))) return FALSE;
+ WCHAR *cmdline_new = NULL;
+
+ if ((append = hack_append_command_line( cmd_line )))
+ {
+ cmdline_new = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(WCHAR)
+ * (lstrlenW(cmd_line) + lstrlenW(append) + 1) );
+ lstrcpyW(cmdline_new, cmd_line);
+ lstrcatW(cmdline_new, append);
+ }
+
+ tidy_cmdline = get_file_name( cmdline_new ? cmdline_new : cmd_line, name, ARRAY_SIZE(name) );
+
+ if (!tidy_cmdline)
+ {
+ HeapFree( GetProcessHeap(), 0, cmdline_new );
+ return FALSE;
+ }
+
+ if (cmdline_new)
+ {
+ if (cmdline_new == tidy_cmdline) cmd_line = NULL;
+ else HeapFree( GetProcessHeap(), 0, cmdline_new );
+ }
app_name = name;
}
--
2.50.1
|