From c1b4df3ba35d3c1b64c3ad5eb4aa8a7769905c5d Mon Sep 17 00:00:00 2001 From: Rasta Mouse Date: Tue, 14 Oct 2025 15:02:05 +0100 Subject: [PATCH] use TpWaitForWork https://x.com/saerxcit/status/1978065616259960992 --- src/tp.c | 13 ++++++------- src/tp.h | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/tp.c b/src/tp.c index 45dc256..4034e7e 100644 --- a/src/tp.c +++ b/src/tp.c @@ -28,10 +28,10 @@ #include "tp.h" -WINBASEAPI VOID NTAPI NTDLL$TpAllocWork (PTP_WORK*, PTP_WORK_CALLBACK, PVOID, PTP_CALLBACK_ENVIRON); -WINBASEAPI VOID NTAPI NTDLL$TpPostWork (PTP_WORK); -WINBASEAPI VOID NTAPI NTDLL$TpReleaseWork (PTP_WORK); -WINBASEAPI DWORD WINAPI KERNEL32$WaitForSingleObject (HANDLE, DWORD); +WINBASEAPI VOID NTAPI NTDLL$TpAllocWork (PTP_WORK*, PTP_WORK_CALLBACK, PVOID, PTP_CALLBACK_ENVIRON); +WINBASEAPI VOID NTAPI NTDLL$TpPostWork (PTP_WORK); +WINBASEAPI VOID NTAPI NTDLL$TpWaitForWork (PTP_WORK, BOOL); +WINBASEAPI VOID NTAPI NTDLL$TpReleaseWork (PTP_WORK); void __attribute__((naked)) WorkCallback() { @@ -56,13 +56,12 @@ void __attribute__((naked)) WorkCallback() ); } -VOID ProxyNtApi(NTARGS * args, DWORD delay) +VOID ProxyNtApi(NTARGS * args) { PTP_WORK WorkReturn = NULL; NTDLL$TpAllocWork(&WorkReturn, (PTP_WORK_CALLBACK)WorkCallback, args, NULL); NTDLL$TpPostWork(WorkReturn); + NTDLL$TpWaitForWork(WorkReturn, FALSE); NTDLL$TpReleaseWork(WorkReturn); - - KERNEL32$WaitForSingleObject((HANDLE)(-1), delay); } \ No newline at end of file diff --git a/src/tp.h b/src/tp.h index 4e82b28..87e6f9c 100644 --- a/src/tp.h +++ b/src/tp.h @@ -12,4 +12,4 @@ typedef struct { ULONG_PTR argument6; } NTARGS; -VOID ProxyNtApi(NTARGS * args, DWORD delay); \ No newline at end of file +VOID ProxyNtApi(NTARGS * args); \ No newline at end of file