mirror of
https://github.com/SpeedBreakerProject/speedbreaker.git
synced 2026-10-18 14:01:23 +02:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
908 B
C++
46 lines
908 B
C++
// Adapted from Unleashed Recompiled (https://github.com/hedge-dev/UnleashedRecomp),
|
|
// GPL-3.0-or-later. Modified for SpeedBreaker.
|
|
#include <stdafx.h>
|
|
#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();
|
|
}
|