protonscr

Arknights: Endfield

protonopen appid 4732690Game compatibility - Unofficial
ValveSoftware/Proton#10097 · opened 2026-08-27 by TehFreek · updated 2026-10-16 · 7 comments · github · game page · search this game
TTehFreek 2026-08-27 github

With Arknights: Endfield coming to Steam... eventually, I feel that it's time to take a look at dwproton and GE-Proton to see which changes allow it to run (currently standalone) and pull them into base Proton.

Kkisak-valve maintainer 2026-08-27 github

Hello @TehFreek, this isn't generally useful feedback for a Proton dev to ponder. Instead, please describe how the game behaves with a mainline Proton build and provide logs to go along with any quirks you're observing.

TTehFreek 2026-08-27 github

Fair enough. Here's the log for the standalone version (since I don't have access to the Steam version yet) under Proton 11.0-2. Up to 1678872.439 is the launcher, everything after is trying to start the game proper. The game crashes silently and drops back to the launcher.

steam-15952211254156722176.log

Kkisak-valve maintainer 2026-08-27 github

Unhandled exception: unimplemented function ntoskrnl.exe.KeAcquireGuardedMutex called in 64-bit code (0x006ffffff9c200). in your Proton log hints towards, https://github.com/ValveSoftware/Proton/issues/9331, but there's also a lot of access violations (c0000005) in EndfieldBase.dll before that which might be more important.

TTehFreek 2026-08-27 github

Endfield does use AntiCheatExpert, so that definitely sounds relevant in some manner.

Bbroli 2026-09-09 github

Following up on the silent crash with AntiCheatExpert (ACE-BASE.sys) in Proton 11:

Root Cause

When ACE-BASE.sys initializes inside winedevice.exe, it calls two unimplemented ntoskrnl.exe stubs:

  1. PsGetProcessExitProcessCalled (queries whether the process has called PsExitProcess)
  2. SeQueryInformationToken (queries access token credentials)

Because both are @ stub in dlls/ntoskrnl.exe/ntoskrnl.exe.spec, Wine raises non-continuable STATUS_WINE_STUB exceptions. This aborts winedevice.exe and terminates the anti-cheat driver, causing Endfield.exe to drop back to the desktop ~9 seconds into launch.

Minimal Fix

Implementing safe stubs in ntoskrnl.exe allows the game to boot and run cleanly:

  1. PsGetProcessExitProcessCalled: Return FALSE. The process is running and has not initiated exit.
  2. SeQueryInformationToken: Return STATUS_NOT_IMPLEMENTED (0xC0000002). The ACE driver disassembly shows it checks test %eax, %eax; js ... on the return code; returning an NTSTATUS failure cleanly activates the driver's fallback token cleanup rather than crashing.

Patch Diff

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -952,3 +952,3 @@
-@ stub PsGetProcessExitProcessCalled
+@ stdcall PsGetProcessExitProcessCalled(ptr)
-@ stub SeQueryInformationToken
+@ stdcall SeQueryInformationToken(ptr long ptr)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3420,6 +3420,18 @@
+BOOLEAN WINAPI PsGetProcessExitProcessCalled(PEPROCESS process)
+{
+    TRACE("(%p)\n", process);
+    return FALSE;
+}
+
+NTSTATUS WINAPI SeQueryInformationToken(PACCESS_TOKEN token, TOKEN_INFORMATION_CLASS class, PVOID *info)
+{
+    FIXME("(%p, %u, %p): stub\n", token, class, info);
+    return STATUS_NOT_IMPLEMENTED;
+}

Verification

Verified on Wine 11 / Proton 11: with these two stubs implemented, ACE initializes without errors, PlatformProcess.exe and CefViewWing start, and Endfield.exe successfully loads into gameplay.

TTehFreek 2026-10-15 github

The latest version of AKE has updated to a new version of ACE, so the investigation might need to start fresh.

AKE has also been released on Steam so there is that to consider as well.

Kkuriminanya 2026-10-16 github

Tested the Steam version (4732690) after the 2026-10-15 update with Proton Experimental (experimental-11.0-20261014). ACE now fails differently from the earlier reports: the new ACE-CORE driver loads as native and immediately calls KeBugCheckEx with code 0x65636157 (ASCII "Wace"):

3457.726:02a4:02b0:trace:loaddll:build_module Loaded L"C:\\Program Files\\AntiCheatExpert\\ACE-CORE1024303.sys" at 0000000100400000: native
3457.726:02a4:02b0:err:ntoskrnl:KeBugCheckEx 65636157 0 0 0 0
3457.735:0030:0048:err:service:process_send_command service protocol error - failed to read pipe r = 0  count = 0!

There are no unimplemented-function or stub exceptions before it, so this looks like the driver deliberately bugchecking after a failed check in DriverEntry, not a missing export.

Same result on GE-Proton11-9 and Proton-CachyOS 11.0-20261005. dwproton-11.0-14 still works with the new ACE.

FWIW, the new ACE-CORE.sys also imports KeIpiGenericCall, KeSetSystemGroupAffinityThread, KeRevertToUserGroupAffinityThread, KeGetProcessorNumberFromIndex, KeTryToAcquireGuardedMutex and ObDereferenceObjectDeferDelete, but dwproton's ntoskrnl doesn't export them either, so they're probably not what makes the difference.

System: CachyOS, kernel 7.2.9, KDE Plasma 6.8 Wayland, RTX 3060 Ti, NVIDIA 615.78.08
Launch options: XMODIFIERS=@im=none PROTON_LOG=1 %command%

Log (Proton Experimental): https://gist.github.com/kuriminanya/a3fef7b0d1cda84a639ba1d1f5976ee0

Related threads

Proton versions

Launch options

Launch lines

Upstream links

DLLs

Error codes