private void SvcStartThread(AThreadState ThreadState) { int Handle = (int)ThreadState.X0; KThread Thread = Process.HandleTable.GetObject <KThread>(Handle); if (Thread != null) { long Result = Thread.Start(); if (Result != 0) { Device.Log.PrintWarning(LogClass.KernelSvc, $"Operation failed with error 0x{Result:x}!"); } ThreadState.X0 = (ulong)Result; } else { Device.Log.PrintWarning(LogClass.KernelSvc, $"Invalid thread handle 0x{Handle:x8}!"); ThreadState.X0 = MakeError(ErrorModule.Kernel, KernelErr.InvalidHandle); } }
private void SvcStartThread(CpuThreadState threadState) { int handle = (int)threadState.X0; KThread thread = _process.HandleTable.GetObject <KThread>(handle); if (thread != null) { KernelResult result = thread.Start(); if (result != KernelResult.Success) { Logger.PrintWarning(LogClass.KernelSvc, $"Operation failed with error \"{result}\"."); } threadState.X0 = (ulong)result; } else { Logger.PrintWarning(LogClass.KernelSvc, $"Invalid thread handle 0x{handle:x8}!"); threadState.X0 = MakeError(ErrorModule.Kernel, KernelErr.InvalidHandle); } }