https://bugs.winehq.org/show_bug.cgi?id=49267
Bug ID: 49267 Summary: Denuvo Anti-Cheat 'denuvo-anti-cheat.sys' needs support for CustomTimerDpc via ntoskrnl.exe.KeSetTimer{Ex} Product: Wine Version: 5.9 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: ntoskrnl Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
continuation of bug 49230 (split out from bug 49194).
--- snip --- $ WINEDEBUG=+seh,+relay,+int,+ntoskrnl,+ntdll,+reg wine net start "Denuvo Anti-Cheat" >>log.txt 2>&1 ... 00f8:Call ntoskrnl.exe.KeInitializeTimer(04b600c4) ret=00caeab7 00f8:trace:ntoskrnl:KeInitializeTimerEx timer 0000000004B600C4, type 0. 00f8:Ret ntoskrnl.exe.KeInitializeTimer() retval=00000020 ret=00caeab7 00f8:Call ntoskrnl.exe.KeInitializeDpc(04b60104,00caecf0,04b6009c) ret=00caeacb 00f8:fixme:ntoskrnl:KeInitializeDpc Dpc 0000000004B60104, DeferredRoutine 0000000000CAECF0, DeferredContext 0000000004B6009C, Dpc->DeferredRoutine 0000000000000000 stub 00f8:Ret ntoskrnl.exe.KeInitializeDpc() retval=00000085 ret=00caeacb 00f8:Call ntoskrnl.exe.KeSetTimer(04b600c4,ffffffffff676980,04b60104) ret=00caeae9 00f8:trace:ntoskrnl:KeSetTimer Timer 0000000004B600C4, DueTime ffffffffff676980, Dpc 0000000004B60104. 00f8:trace:ntoskrnl:KeSetTimerEx timer 0000000004B600C4, duetime ffffffffff676980, period 0, dpc 0000000004B60104. 00f8:fixme:ntoskrnl:KeSetTimerEx Unhandled DPC 0000000004B60104. 00f8:Ret ntoskrnl.exe.KeSetTimer() retval=00000000 ret=00caeae9 ... --- snip ---
Wine source:
https://source.winehq.org/git/wine.git/blob/e48fabff525061c8eea9558084a97308...
--- snip --- 414 /*********************************************************************** 415 * KeSetTimerEx (NTOSKRNL.EXE.@) 416 */ 417 BOOLEAN WINAPI KeSetTimerEx( KTIMER *timer, LARGE_INTEGER duetime, LONG period, KDPC *dpc ) 418 { 419 BOOL ret; 420 421 TRACE("timer %p, duetime %s, period %d, dpc %p.\n", 422 timer, wine_dbgstr_longlong(duetime.QuadPart), period, dpc); 423 424 if (dpc) 425 { 426 FIXME("Unhandled DPC %p.\n", dpc); 427 return FALSE; 428 } 429 ... --- snip ---
Microsoft docs (how this is supposed to work):
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/registering...
It includes a nice diagram that illustrates the usage of timer and DPC objects for a CustomTimerDpc routine.
Created snapshot of the page via Internet Archive in case it gets "lost".
$ wine --version wine-5.9-107-g3104715700
Regards