mirror of
https://github.com/gwdevhub/Daybreak.git
synced 2026-07-15 15:19:57 +00:00
37 lines
1.2 KiB
C#
37 lines
1.2 KiB
C#
using Daybreak.Shared.Models;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Daybreak.Injector;
|
|
|
|
public static class ThreadResumer
|
|
{
|
|
public static InjectorResponses.ResumeResult Resume(IntPtr threadId)
|
|
{
|
|
if (threadId == 0)
|
|
{
|
|
return InjectorResponses.ResumeResult.InvalidThreadHandle;
|
|
}
|
|
|
|
var threadHandle = NativeMethods.OpenThread(NativeMethods.ThreadAccess.SuspendResume, false, (uint)threadId);
|
|
if (threadHandle == IntPtr.Zero)
|
|
{
|
|
var openErr = Marshal.GetLastWin32Error();
|
|
Console.WriteLine($"OpenThread failed. Error: {openErr}");
|
|
return InjectorResponses.ResumeResult.InvalidThreadHandle;
|
|
}
|
|
|
|
var result = NativeMethods.ResumeThread(threadHandle);
|
|
Console.WriteLine($"ResumeThread result: {result}");
|
|
NativeMethods.CloseHandle(threadHandle);
|
|
|
|
if (result == uint.MaxValue)
|
|
{
|
|
var resumeErr = Marshal.GetLastWin32Error();
|
|
Console.WriteLine($"ResumeThread failed. Error: {resumeErr}");
|
|
return InjectorResponses.ResumeResult.InvalidThreadHandle;
|
|
}
|
|
|
|
return InjectorResponses.ResumeResult.Success;
|
|
}
|
|
}
|