// Adapted from Unleashed Recompiled (https://github.com/hedge-dev/UnleashedRecomp), // GPL-3.0-or-later. Modified for SpeedBreaker. #include #include "xdm.h" #include "freelist.h" Mutex g_kernelLock; void DestroyKernelObject(KernelObject* obj) { obj->~KernelObject(); g_userHeap.Free(obj); } void ReleaseKernelObject(KernelObject* obj) { if (--obj->refs == 0) DestroyKernelObject(obj); } uint32_t GetKernelHandle(KernelObject* obj) { assert(obj != GetInvalidKernelObject()); return g_memory.MapVirtual(obj); } void DestroyKernelObject(uint32_t handle) { DestroyKernelObject(GetKernelObject(handle)); } bool IsKernelObject(uint32_t handle) { return (handle & 0x80000000) != 0; } bool IsKernelObject(void* obj) { return IsKernelObject(g_memory.MapVirtual(obj)); } bool IsInvalidKernelObject(void* obj) { return obj == GetInvalidKernelObject(); }