Kernel: Difference between revisions

m Hexkyz moved page Kernel objects to Kernel: Use this page for general kernel documentation
 
(56 intermediate revisions by 5 users not shown)
Line 2: Line 2:
Size: 0x10
Size: 0x10


[5.0.0] Size: 0x20
[6.0.0] Size: 0x30
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || * || Vtable
|-
| 8 || u32 || ReferenceCount
|}
[5.0.0]:
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || * || Vtable
|-
| 8 || u32 || ReferenceCount
|-
| 0x10 || KLinkedListNode || Intrusive list, links to other instances of the same class (managed by a KObjectAllocator).
|}
[6.0.0]:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 8: Line 34:
| 0 || * || Vtable
| 0 || * || Vtable
|-
|-
| 8 || u64 || ReferenceCount
| 8 || u32 || ReferenceCount
|-
| 0x10 || [[#KRedBlackTreeNode]] || Intrusive red-black tree node, replaces the Intrusive list node from previous versions.
|}
|}


= KSynchronizationObject =
= KSynchronizationObject =
Size: 0x28
Size: 0x28
[5.0.0] Size: 0x38
[6.0.0] Size: 0x48


Inherits from: [[#KAutoObject]]
Inherits from: [[#KAutoObject]]
Line 22: Line 54:
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0x10 || u64 || ThreadSyncNum
| 0x10 || [[#KLinkedList]] || ThreadSyncList
|-
| 0x18 || [[#KLinkedListNode]] || ThreadSyncList
|}
|}


= KRecursiveLock =
= KMutex =
Size: 0x8
Size: 0x8


Line 37: Line 67:
|}
|}


= KLockedList =
= KRecursiveLock =
Size: 0x18
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KThread]] * || Owner
|-
| 8 || s32 || Count
|}
 
 
= KLockedList =
Size: 0x28
Size: 0x28
[5.0.0]? Size: 0x20


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 48: Line 93:
| 8 || [[#KLinkedListNode]] || List
| 8 || [[#KLinkedListNode]] || List
|-
|-
| 0x18 || [[#KRecursiveLock]] || Mutex
| 0x18 || [[#KMutex]] || Mutex
|-
|-
| 0x20 || u64 || MaxCount
| 0x20 || u64 || MaxCount
|}
[5.0.0]?:
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KLinkedListNode]] || List
|-
| 0x10 || [[#KMutex]] || Mutex
|-
| 0x18 || u64 || MaxCount
|}
|}


Line 65: Line 123:
|}
|}


= KProcess =
= KLinkedListEntry =
[1.0.0] Size: 0x5B0
Size: 0x10 + <code>sizeof(T)</code>


[2.0.0] Size: 0x2480
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KLinkedListNode]] || NodeFor__List
|-
| 0x10 || T || Data
|}


[3.0.0] Size: 0x2580
= KLinkedList =
Size: 0x18


Inherits from: [[#KSynchronizationObject]]
<div style="display: inline-block">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
! Offset || Type || Description
|-
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0 || u64 || Count
|-
|-
| 0x28 || KProcessScheduler || Scheduler
| 8 || [[#KLinkedListNode]] || Bounds (first, last)
|}
 
= KRedBlackTreeNode =
Size: 0x20
 
Note: This is BSD sys/tree.h's RB_ENTRY(...).
 
{| class="wikitable" border="1"
|-
|-
| 0x38 || [[#KMemoryManager]] || MemoryManager
! Offset || Type || Description
|-
|-
| 0xF0 || u64 || TotalMemUsage
| 0 || KRedBlackTreeNode* || Left Child
|-
|-
| 0xF8 || u64 || TlsPagesListCount
| 8 || KRedBlackTreeNode* || Right Child
|-
|-
| 0x100 || [[#KLinkedListNode]] || TlsPagesList
| 0x10 || KRedBlackTreeNode* || Parent
|-
|-
| 0x110 || s32 || DefaultCpuCore
| 0x18 || int || Color
|-
|}
| 0x118 || KDebug* || Debug
 
= KRedBlackTree =
Size: 0x8
 
Note: This is BSD sys/tree.h's RB_HEAD(..., KRedBlackTreeNode);
 
{| class="wikitable" border="1"
|-
|-
| 0x120 || [[#KResourceLimit]]* || ResourceLimit
! Offset || Type || Description
|-
|-
| 0x128 || u32 || State
| 0 || KRedBlackTreeNode* || Root
|-
|-
| 0x130 || [[#KRecursiveLock]] || ProcessMutex
|}
 
= KThread =
[1.0.0] Size: 0x620
[5.0.0]? Size: 0x6C0
 
Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]
 
<div style="display: inline-block">
{| class="wikitable" border="1"
|-
|-
| 0x138 || [[#KRecursiveLock]] || ThreadingMutex
! 1.0.0 Offset || Type || Description
|-
|-
| 0x140 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadArbiterList
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
|-
| 0x150 || KLinkedListNode ||
| 0x28 || KSchedulerObject0 || Inheritance
|-
|-
| 0x160 || u64[4] || RandomEntropy
| 0x48 || KSchedulerObject1 || Inheritance
|-
|-
| 0x180 || u8 || HasStateChanged
| 0x58 || KSchedulerObject2 || Inheritance
|-
|-
| 0x181 || u8 || HasInitialized
| 0x70 || KThreadContext || Context
|-
|-
| 0x182 || u8 || IsSystem
| 0x2F0 || u64 || CoreMask
|-
|-
| 0x183 || u8[12+1] || ProcessName
| 0x2F8 || u64 || CoreMaskOverride
|-
|-
| 0x190 || u16 || NumberOfCreatedThreads
| 0x300 || u64 || ThreadId
|-
|-
| 0x192 || u16 || ThreadingRelatedInitiallyZero
| 0x308 || u64 || TotalTimeRunning
|-
|-
| 0x194 || u32 || ProcessFlags
| 0x310 || [[#KSynchronizationObject]]* || SignalledObjectPtr
|-
|-
| 0x198 || [[#KProcessCapabilities]] || Capabilities
| 0x318 || u64 ||
|-
|-
| 0x248 || u64 || TitleId
| 0x320 || u64 || CondVar_CondVarUserAddr
|-
|-
| 0x250 || u64 || ProcessId
| 0x328 || u64 || Entrypoint
|-
|-
| 0x258 || u64 || CreatedTickstamp
| 0x330 || u64 || CondVar_MutexUserAddr
|-
|-
| 0x260 || u64 || Entrypoint
| 0x338 || [[#KProcess]]* || ProcessPtr
|-
|-
| 0x268 || u64 || CodeMemUsage
| 0x340 || void* || KernelThreadStack
|-
|-
| 0x270 || u64 || DynamicMemUsage
| 0x348 || u64 ||
|-
|-
| 0x278 || u64 || MaxTotalMemUsage
| 0x350 || void* || TlsKernelPtr
|-
|-
| 0x280 || u32 || From_CreateProcessInfo_0xC
| 0x358 || void* || TlsPhysicalPtr
|-
|-
| 0x288 || [[#KProcessHandleTable]] || HandleTable
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects
|-
|-
| 0x528 || void* || UsermodeExceptionTlsArea
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr
|-
|-
| 0x530 || [[#KLinkedListNode]]<[[#KThread]]> || ExceptionThreadList
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr
|-
|-
| 0x540 || [[#KThread]]* || ExceptionThread
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr?
|-
|-
| 0x548 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadList
| 0x578 || KLinkedListNode ||
|-
|-
| 0x558 || bool || HasStarted
| 0x588 || KLinkedListNode ||
|-
|-
| 0x55C || u32 || UnusedZero
| 0x598 || KLinkedListNode || NodeFor__ThreadList
|-
|-
| 0x560 || u64[8] || UnusedZeroes
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore
|-
|-
| 0x5A0 || u64 || UnusedZero
| 0x5B8 || [[#KThread]]* ||
|-
|-
| 0x5A8 || u64 || UnusedZero
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
| 0x5C8 || u64 ||
|-
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0x5D0 || u64 ||
|-
|-
| 0x28 || KProcessScheduler || Scheduler
| 0x5D8 || u64 ||
|-
|-
| 0x38 || [[#KMemoryManager]] || MemoryManager
| 0x5E0 || u32 || CondVar_WaitThreadHandle
|-
|-
| 0x100 || u64 || TotalMemUsage
| 0x5E4 || u32 || SchedulingFlags_Default
|-
|-
| 0x108 || u64 || TlsPagesListCount
| 0x5E8 || u32 || WaitSync_RetVal
|-
|-
| 0x110 || [[#KLinkedListNode]] || TlsPagesList
| 0x5EC || u32 ||
|-
|-
| 0x120 || s32 || DefaultCpuCore
| 0x5F0 || u32 || ActualPriority
|-
|-
| 0x128 || KDebug* || Debug
| 0x5F4 || u32 ||
|-
|-
| 0x130 || [[#KResourceLimit]]* || ResourceLimit
| 0x5F8 || u32 ||
|-
|-
| 0x138 || u32 || State
| 0x5FC || u32 ||
|-
|-
| 0x140 || [[#KRecursiveLock]] || ProcessMutex
| 0x600 || u32 || WantedPriority
|-
|-
| 0x148 || [[#KRecursiveLock]] || ThreadingMutex
| 0x604 || u32 || CpuCore
|-
|-
| 0x150 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadArbiterList
| 0x608 || u8 || State
|-
|-
| 0x160 || KLinkedListNode ||
| 0x609 || u8 || ShallBeTerminated
|-
|-
| 0x170 || u64[4] || RandomEntropy
| 0x60A || u8 ||
|-
|-
| 0x190 || u8 || HasStateChanged
| 0x60B || u8 ||
|-
|-
| 0x191 || u8 || HasInitialized
| 0x60C || u8 ||
|-
|-
| 0x192 || u8 || IsSystem
| 0x60D || u8 ||
|-
|-
| 0x193 || u8[12+1] || ProcessName
| 0x60E || u8 || HasExited
|-
|-
| 0x1A0 || u16 || NumberOfCreatedThreads
| 0x60F || u8 || HasCpuCoreOverride
|-
|-
| 0x1A2 || u16 || ThreadingRelatedInitiallyZero
| ... || ... || ...
|}
 
= KProcess =
[1.0.0] Size: 0x5B0
 
[2.0.0] Size: 0x2480
 
[3.0.0] Size: 0x2580
 
[5.0.0] Size: 0x4600
 
Inherits from: [[#KSynchronizationObject]]
 
<div style="display: inline-block">
{| class="wikitable" border="1"
|-
|-
| 0x1A4 || u32 || ProcessFlags
! 1.0.0 Offset || Type || Description
|-
|-
| 0x1A8 || [[#KProcessCapabilities]] || Capabilities
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
|-
| 0x258 || u64 || TitleId
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.
|-
|-
| 0x260 || u64 || ProcessId
| 0x38 || [[#KMemoryManager]] || MemoryManager
|-
|-
| 0x268 || u64 || CreatedTickstamp
| 0xF0 || u64 || TotalMemUsage
|-
|-
| 0x270 || u64 || Entrypoint
| 0xF8 || [[#KLinkedList]]<[[#KTlsPageManager]]*>> || TlsPagesList
|-
|-
| 0x278 || u64 || CodeMemUsage
| 0x110 || s32 || DefaultCpuCore
|-
|-
| 0x280 || u64 || DynamicMemUsage
| 0x118 || [[#KDebug]]* || Debug
|-
|-
| 0x288 || u64 || MaxTotalMemUsage
| 0x120 || [[#KResourceLimit]]* || ResourceLimit
|-
|-
| 0x290 || u32 || From_CreateProcessInfo_0xC
| 0x128 || u32 || State
|-
|-
| 0x298 || u64[5] || Unused [?]
| 0x130 || [[#KMutex]] || ProcessMutex
|-
|-
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable
| 0x138 || [[#KMutex]] || ThreadingMutex
|-
|-
| 0x2380 || void* || UsermodeExceptionTlsArea
| 0x140 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadArbiterList
|-
|-
| 0x2388 || [[#KLinkedListNode]]<[[#KThread]]> || ExceptionThreadList
| 0x150 || KLinkedListNode ||
|-
|-
| 0x2398 || [[#KThread]]* || ExceptionThread
| 0x160 || u64[4] || RandomEntropy
|-
|-
| 0x23A0 || [[#KLinkedListNode]]<[[#KThread]]> || ThreadList
| 0x180 || u8 || HasStateChanged
|-
|-
| 0x23B0 || [[#KLinkedListNode]]<[[#KSharedMemoryRef]]> || MappedSharedMemoriesList
| 0x181 || u8 || HasInitialized
|-
|-
| 0x23C0 || bool || HasStarted
| 0x182 || u8 || IsSystem
|-
|-
| 0x23C1 || bool || HasException
| 0x183 || u8[12+1] || ProcessName
|-
|-
| 0x23C4 || u32 || ExceptionEnum0
| 0x190 || u16 || NumberOfCreatedThreads
|-
|-
| 0x23C8 || u64 || ExceptionEnum1
| 0x192 || u16 || ThreadingRelatedInitiallyZero
|-
|-
| 0x23D0 || u64 || ExceptionThreadUnkInfo0
| 0x194 || u32 || ProcessFlags
|-
|-
| 0x23D8 || u64 || BreakArg0
| 0x198 || [[#KProcessCapabilities]] || Capabilities
|-
|-
| 0x23E0 || u64 || BreakArg1
| 0x248 || u64 || TitleId
|-
|-
| 0x23E8 || u64 || BreakArg2
| 0x250 || u64 || ProcessId
|-
|-
| 0x23F0 || u64 || ExceptionThreadUnkInfo1
| 0x258 || u64 || CreatedTickstamp
|-
|-
| 0x23F8 || u32 || UnusedZero
| 0x260 || u64 || Entrypoint
|-
|-
| 0x2400 || u64[8] || UnusedZeroes
| 0x268 || u64 || CodeMemUsage
|-
|-
| 0x2440 || u64 || UnusedZero
| 0x270 || u64 || DynamicMemUsage
|-
|-
| 0x2448 || u64 || UnusedZero
| 0x278 || u64 || MaxTotalMemUsage
|-
|-
| 0x2450 || u64[6] || Unused [?]
| 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)
|}
</div>
 
== KProcessCapabilities ==
Size: 0xB0
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x288 || [[#KProcessHandleTable]] || HandleTable
! Type
|-
! Description
| 0x528 || void* || UsermodeExceptionTlsArea
|-
| 0x530 || [[#KLinkedListNode]]<[[#KThread]] *> || ExceptionThreadList
|-
| 0x540 || [[#KThread]]* || ExceptionThread
|-
|-
| 0 || u8[16] || SvcAccessMask
| 0x548 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadList
|-
|-
| 0x10 || u8[128] || IrqAccessMask
| 0x558 || bool || HasStarted
|-
|-
| 0x90 || u64 || AllowedCpuIdBitmask
| 0x55C || u32 || UnusedZero
|-
|-
| 0x98 || u64 || AllowedThreadPrioBitmask
| 0x560 || u64[2] || UnusedZeroes
|-
|-
| 0xA0 || u32 || DebuggingFlags
| 0x570 || u64 || TotalTimeRunning
|-
|-
| 0xA4 || u32 || HandleTableSize
| 0x578 || u64[5] || UnusedZeroes
|-
|-
| 0xA8 || u32 || KernelReleaseVersion
| 0x5A0 || u64 || UnusedZero
|-
|-
| 0xAC || u32 || ApplicationType
| 0x5A8 || u64 || UnusedZero
|}
|}
</div>


== KProcessHandleTable ==
<div style="display: inline-block; vertical-align:top;">
[1.0.0] Size: 0x2A0
{| class="wikitable" border="1"
 
[2.0.0] Size: 0x20C0
 
<div style="display: inline-block">
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
! 2.0.0 Offset || Type || Description
|-
|-
| 0 || [[#KHandleEntry]]* || TablePtr
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
|-
| 8 || [[#KHandleEntry]]* || NextFreeEntry
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.
|-
|-
| 0x10 || [[#KHandleEntry]][40] || InternalTable
| 0x38 || [[#KMemoryManager]] || MemoryManager
|-
|-
| 0x290 || u16 || Size
| 0x100 || u64 || TotalMemUsage
|-
|-
| 0x292 || u16 || MaxUsageAtOnce
| 0x108 || [[#KLinkedList]]<[[#KTlsPageManager]]*> || TlsPagesList
|-
|-
| 0x294 || u16 || IdCounter
| 0x120 || s32 || DefaultCpuCore
|-
|-
| 0x296 || u16 || NumActiveSlots
| 0x128 || [[#KDebug]]* || Debug
|-
|-
| 0x298 || [[#KSpinLock]] || Lock
| 0x130 || [[#KResourceLimit]]* || ResourceLimit
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
| 0x138 || u32 || State
|-
|-
| 0 || [[#KHandleEntry]]* || TablePtr
| 0x140 || [[#KMutex]] || ProcessMutex
|-
|-
| 8 || [[#KHandleEntry]]* || NextFreeEntry
| 0x148 || [[#KMutex]] || ThreadingMutex
|-
|-
| 0x10 || [[#KHandleEntry]][1024] || InternalTable
| 0x150 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadArbiterList
|-
|-
| 0x2010 || u16 || Size
| 0x160 || KLinkedListNode ||
|-
|-
| 0x2012 || u16 || MaxUsageAtOnce
| 0x170 || u64[4] || RandomEntropy
|-
|-
| 0x2014 || u16 || IdCounter
| 0x190 || u8 || HasStateChanged
|-
|-
| 0x2016 || u16 || NumActiveSlots
| 0x191 || u8 || HasInitialized
|-
|-
| 0x2040 || [[#KSpinLock]] || Lock
| 0x192 || u8 || IsSystem
|}
</div>
 
=== KHandleEntry ===
[1.0.0] Size: 0x10
 
[2.0.0] Size: 8
 
<div style="display: inline-block">
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
| 0x193 || u8[12+1] || ProcessName
|-
|-
| 0 || u16 || HandleId
| 0x1A0 || u16 || NumberOfCreatedThreads
|-
| 0x1A2 || u16 || ThreadingRelatedInitiallyZero
|-
| 0x1A4 || u32 || ProcessFlags
|-
|-
| 2 || u8 || ObjectType
| 0x1A8 || [[#KProcessCapabilities]] || Capabilities
|-
|-
| 8 || [[#KAutoObject]]* || Object
| 0x258 || u64 || TitleId
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
| 0x260 || u64 || ProcessId
|-
|-
| 0 || u16 || HandleId
| 0x268 || u64 || CreatedTickstamp
|-
|-
| 2 || u8 || ObjectType
| 0x270 || u64 || Entrypoint
|-
|-
| 4 || u32 || ObjectCompressedPtr
| 0x278 || u64 || CodeMemUsage
|}
|-
</div>
| 0x280 || u64 || DynamicMemUsage
 
|-
=== KSpinLock ===
| 0x288 || u64 || MaxTotalMemUsage
[1.0.0] Size: 0x1
 
[2.0.0] Size: 0x40
 
<div style="display: inline-block">
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
| 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)
|-
|-
| 0 || u8 || IsBusy
| 0x298 || u64[5] || Unused [?]
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable
|-
|-
| 0 || u16 ||
| 0x2380 || void* || UsermodeExceptionTlsArea
|-
|-
| 0x20 || u16 ||
| 0x2388 || [[#KLinkedListNode]]<[[#KThread]] *> || ExceptionThreadList
|}
</div>
 
== KSharedMemoryRef ==
[2.0.0] Size: 0x40
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| 0x2398 || [[#KThread]]* || ExceptionThread
|-
|-
| 0 || [[#KLinkedListNode]]<[[#KSharedMemoryRef]]> || NodeFor__MappedSharedMemoriesList
| 0x23A0 || [[#KLinkedListNode]]<[[#KThread]] *> || ThreadList
|-
|-
| 0x10 || [[#KSharedMemory*]] || SharedMem
| 0x23B0 || [[#KLinkedListNode]]<[[#KSharedMemoryRef]] *> || MappedSharedMemoriesList
|-
|-
| 0x18 || u64 || InitiallyZero
| 0x23C0 || bool || HasStarted
|}
 
= KMemoryManager =
[1.0.0] Size: 0xB8
 
[2.0.0] Size: 0xC8
 
<div style="display: inline-block">
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset
| 0x23C1 || bool || HasException
! Type
! Description
|-
|-
| 0 || * || Vtable
| 0x23C4 || u32 || ExceptionEnum0
|-
|-
| 8 || u64 || AddrSpaceMinAddr
| 0x23C8 || u64 || ExceptionEnum1
|-
|-
| 0x10 || u64 || AddrSpaceMaxAddr
| 0x23D0 || u64 || ExceptionThreadUnkInfo0
|-
|-
| 0x18 || u64 || HeapRegionBaseAddr
| 0x23D8 || u64 || BreakArg0
|-
|-
| 0x20 || u64 || HeapRegionEndAddr
| 0x23E0 || u64 || BreakArg1
|-
|-
| 0x28 || u64 || HeapCurAddr
| 0x23E8 || u64 || BreakArg2
|-
|-
| 0x30 || u64 || MapRegionBaseAddr
| 0x23F0 || u64 || ExceptionThreadUnkInfo1
|-
|-
| 0x38 || u64 || MapRegionEndAddr
| 0x23F8 || u32 || UnusedZero
|-
|-
| 0x40 || u64 || HeapMaxAllocation
| 0x2400 || u64[8] || UnusedZeroes
|-
|-
| 0x48 || [[#KRecursiveLock]] || Mutex
| 0x2440 || u64 || UnusedZero
|-
|-
| 0x50 || [[#KPageTable]] || PageTable
| 0x2448 || u64 || UnusedZero
|-
|-
| 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager
| 0x2450 || u64[6] || Unused [?]
|}
</div>
 
== KTlsPageManager ==
Size: 0x20
 
{| class="wikitable" border="1"
|-
|-
| 0x78 || bool || IsKernel
! Offset
! Type
! Description
|-
|-
| 0x79 || bool || IsSystem
| 0 || void* || TlsPagePtr
|-
|-
| 0x7A || bool || IsAddrSpace36Bit
| 8 || [[#KProcess*]] || ProcessPtr
|-
|-
| 0x7B || bool || HasAslr
| 0x10 || u32 || UsageCount
|-
|-
| 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero
| 0x14 || u8[8] || IsSlotFree
|}
 
== KProcessCapabilities ==
Size: 0xB0
 
{| class="wikitable" border="1"
|-
|-
| 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero
! Offset
! Type
! Description
|-
|-
| 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero
| 0 || u8[16] || SvcAccessMask
|-
|-
| 0x88 || ||
| 0x10 || u8[128] || IrqAccessMask
|-
|-
| 0x90 || ||
| 0x90 || u64 || AllowedCpuIdBitmask
|-
|-
| 0x98 || ||
| 0x98 || u64 || AllowedThreadPrioBitmask
|-
|-
| 0xA0 || u64 || TranslationTableBaseRegister0
| 0xA0 || u32 || DebuggingFlags
|-
| 0xA4 || u32 || HandleTableSize
|-
|-
| 0xA8 || u64 || TranslationControlRegister
| 0xA8 || u32 || KernelReleaseVersion
|-
|-
| 0xB0 || u8 || AsidTagValue
| 0xAC || u32 || ApplicationType
|}
|}
</div>


<div style="display: inline-block; vertical-align:top;">
== KProcessHandleTable ==
[1.0.0] Size: 0x2A0
 
[2.0.0] Size: 0x20C0
 
<div style="display: inline-block">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset
! 1.0.0 Offset || Type || Description
! Type
! Description
|-
|-
| 0 || * || Vtable
| 0 || [[#KHandleEntry]]* || TablePtr
|-
|-
| 8 || u64 || AddrSpaceMinAddr
| 8 || [[#KHandleEntry]]* || NextFreeEntry
|-
|-
| 0x10 || u64 || AddrSpaceMaxAddr
| 0x10 || [[#KHandleEntry]][40] || InternalTable
|-
|-
| 0x18 || u64 || HeapRegionBaseAddr
| 0x290 || u16 || Size
|-
|-
| 0x20 || u64 || HeapRegionEndAddr
| 0x292 || u16 || MaxUsageAtOnce
|-
|-
| 0x28 || u64 || HeapCurAddr
| 0x294 || u16 || IdCounter
|-
|-
| 0x30 || u64 || MapRegionBaseAddr
| 0x296 || u16 || NumActiveSlots
|-
|-
| 0x38 || u64 || MapRegionEndAddr
| 0x298 || [[#KSpinLock]] || Lock
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
|-
| 0x40 || u64 || NewUnknownRegionBaseAddr
! 2.0.0 Offset || Type || Description
|-
|-
| 0x48 || u64 || NewUnknownRegionEndAddr
| 0 || [[#KHandleEntry]]* || TablePtr
|-
|-
| 0x50 || u64 ||  
| 8 || [[#KHandleEntry]]* || NextFreeEntry
|-
|-
| 0x58 || u64 ||  
| 0x10 || [[#KHandleEntry]][1024] || InternalTable
|-
|-
| 0x60 || u64 || HeapMaxAllocation
| 0x2010 || u16 || Size
|-
|-
| 0x68 || [[#KRecursiveLock]] || Mutex
| 0x2012 || u16 || MaxUsageAtOnce
|-
|-
| 0x70 || [[#KPageTable]] || PageTable
| 0x2014 || u16 || IdCounter
|-
|-
| 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager
| 0x2016 || u16 || NumActiveSlots
|-
|-
| 0x98 || u32 || AddressSpaceWidth (32/36/39)
| 0x2040 || [[#KSpinLock]] || Lock
|}
</div>
 
=== KHandleEntry ===
[1.0.0] Size: 0x10
 
[2.0.0] Size: 8
 
[5.0.0] Size: 0x10
 
<div style="display: inline-block">
{| class="wikitable" border="1"
|-
|-
| 0x9C || bool || IsKernel
! 1.0.0 Offset || Type || Description
|-
|-
| 0x9D || bool || IsSystem
| 0 || u16 || HandleId
|-
|-
| 0x9E || bool || HasAslr
| 2 || u8 || ObjectType
|-
|-
| 0xA0 || u32 || PoolPartition
| 8 || [[#KAutoObject]]* || Object
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
|-
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero
! 2.0.0 Offset || Type || Description
|-
|-
| 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero
| 0 || u16 || HandleId
|-
|-
| 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero
| 2 || u8 || ObjectType
|-
|-
| 0xB0 || u64 || TranslationTableBaseRegister0
| 4 || u32 || ObjectCompressedPtr
|-
| 0xB8 || u64 || TranslationControlRegister
|-
| 0xC0 || u32 || AsidTagValue
|}
|}
</div>
</div>


== KPageTable ==
<div style="display: inline-block; vertical-align:top;">
Size: 0x10
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 5.0.0 Offset || Type || Description
! Type
! Description
|-
|-
| 0 || void* || RawPageTablePtr
| 0 || u16 || HandleId
|-
|-
| 8 || bool ||
| 2 || u16 || ObjectType
|-
|-
| 0xC || u32 || AddrSpaceSizeInGb
| 8 || [[#KAutoObject]]* || object
|}
|}
</div>


== KMemoryBlockManager ==
=== KSpinLock ===
Size: 0x18
[1.0.0] Size: 0x1
 
[2.0.0] Size: 0x40


<div style="display: inline-block">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 1.0.0 Offset || Type || Description
! Type
! Description
|-
|-
| 0 || [[#KMemoryBlock]]* || MemoryBlockList
| 0 || u8 || IsBusy
|-
| 8 || u64 || MaxAddr
|-
| 0x10 || u64 || MinAddr
|}
|}
</div>


== KMemoryBlock ==
<div style="display: inline-block; vertical-align:top;">
Size: 0x40
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 2.0.0 Offset || Type || Description
! Type
! Description
|-
|-
| 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]]> || NodeFor__MemoryBlockList
| 0 || u16 ||
|-
|-
| 0x10 || ||
| 0x20 || u16 ||
|}
</div>
 
== KSharedMemoryRef ==
[2.0.0] Size: 0x40
 
{| class="wikitable" border="1"
|-
|-
| 0x18 || ||
! Offset || Type || Description
|-
|-
| 0x20 || u64 || BaseAddress
| 0 || [[#KLinkedListNode]]<[[#KSharedMemoryRef]] *> || NodeFor__MappedSharedMemoriesList
|-
|-
| 0x28 || u64 || NumOfPages
| 0x10 || [[#KSharedMemory*]] || SharedMem
|-
|-
| 0x30 || u32 || State
| 0x18 || u64 || InitiallyZero
|-
| 0x34 || u16 || IpcRefCount [?]
|-
| 0x36 || u16 || DeviceMapRefCount
|-
| 0x38 || u8 || Permission
|-
| 0x39 || u8 || UnkAttribute
|-
| 0x3A || u8 || Attribute
|}
|}


== KMemoryBlockInfo ==
= KMemoryManager =
Size: 0x20
[1.0.0] Size: 0xB8
 
[2.0.0] Size: 0xC8
 
[5.0.0] Size: 0xF8?


<div style="display: inline-block">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 1.0.0 Offset
! Type
! Type
! Description
! Description
|-
|-
| 0 || u64 || BaseAddress
| 0 || * || Vtable
|-
| 8 || u64 || AddrSpaceMinAddr
|-
|-
| 8 || u64 || Size
| 0x10 || u64 || AddrSpaceMaxAddr
|-
|-
| 0x10 || u32 || State
| 0x18 || u64 || HeapRegionBaseAddr
|-
|-
| 0x14 || u8 || Permission
| 0x20 || u64 || HeapRegionEndAddr
|-
|-
| 0x15 || u8 || Attribute
| 0x28 || u64 || HeapCurAddr
|-
|-
| 0x16 || u8 || UnkAttribute
| 0x30 || u64 || MapRegionBaseAddr
|-
|-
| 0x18 || u16 || IpcRefCount [?]
| 0x38 || u64 || MapRegionEndAddr
|-
|-
| 0x1A || u16 || DeviceMapRefCount
| 0x40 || u64 || HeapMaxAllocation
|}
 
= KTransferMemory =
Size: 0x48
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x48 || [[#KMutex]] || Mutex
! Type
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0x50 || [[#KPageTable]] || PageTable
|-
|-
| 0x10 || KMemoryBlockList || Blocks
| 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager
|-
|-
| 0x28 || [[#KProcess]]* || OwnerProcess
| 0x78 || bool || IsKernel
|-
|-
| 0x30 || u64 || BaseAddress
| 0x79 || bool || IsSystem
|-
|-
| 0x38 || KRecursiveLock || Mutex
| 0x7A || bool || IsAddrSpace36Bit
|-
|-
| 0x40 || int || Permission
| 0x7B || bool || HasAslr
|-
|-
| 0x44 || bool || HasInited
| 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero
|-
|-
| 0x45 || bool || IsMapped
| 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero
|}
 
= KSharedMemory =
[1.0.0] Size: 0x40
 
[2.0.0] Size: 0x48
 
Inherits from: [[#KAutoObject]]
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
| 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0x88 || ||
|-
|-
| 0x10 || KMemoryBlockList || Blocks
| 0x90 || ||
|-
|-
| 0x28 || [[#KProcess]]* || OwnerProcess
| 0x98 || ||
|-
|-
| 0x30 || int || LocalPermission
| 0xA0 || u64 || TranslationTableBaseRegister0
|-
|-
| 0x34 || int || RemotePermission
| 0xA8 || u64 || TranslationControlRegister
|-
|-
| 0x38 || bool || HasInited
| 0xB0 || u8 || AsidTagValue
|}
|}
</div>
</div>
Line 695: Line 752:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
! 2.0.0 Offset
! Type
! Description
|-
| 0 || * || Vtable
|-
| 8 || u64 || AddrSpaceMinAddr
|-
| 0x10 || u64 || AddrSpaceMaxAddr
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0x18 || u64 || HeapRegionBaseAddr
|-
|-
| 0x10 || KMemoryBlockList || Blocks
| 0x20 || u64 || HeapRegionEndAddr
|-
|-
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit
| 0x28 || u64 || HeapCurAddr
|-
|-
| 0x30 || u64 || OwnerProcessPid
| 0x30 || u64 || MapRegionBaseAddr
|-
|-
| 0x38 || int || LocalPermission
| 0x38 || u64 || MapRegionEndAddr
|-
|-
| 0x3C || int || RemotePermission
| 0x40 || u64 || NewMapRegionBaseAddr
|-
|-
| 0x40 || bool || HasInited
| 0x48 || u64 || NewMapRegionEndAddr
|}
|-
 
| 0x50 || u64 || TlsIoRegionBaseAddr
</div>
|-
 
| 0x58 || u64 || TlsIoRegionEndAddr
= KPort =
Size: 0xA8
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x60 || u64 || HeapMaxAllocation
! Type
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0x68 || [[#KMutex]] || Mutex
|-
|-
| 0x10 || [[#KServerPort]] || ServerSide
| 0x70 || [[#KPageTable]] || PageTable
|-
|-
| 0x60 || [[#KClientPort]] || ClientSide
| 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager
|-
|-
| 0x98 || u64 ||
| 0x98 || u32 || AddressSpaceWidth (32/36/39)
|-
|-
| 0xA0 || bool || HasInited
| 0x9C || bool || IsKernel
|-
|-
| 0xA1 || bool || IsLight
| 0x9D || bool || IsSystem
|}
|-
 
| 0x9E || bool || HasAslr
== KServerPort ==
|-
Size: 0x50
| 0xA0 || u32 || PoolPartition
 
|-
Inherits from: [[#KSynchronizationObject]]
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero
! Type
! Description
|-
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero
|-
|-
| 0x28 || [[#KLinkedListNode]] || IncomingConnections
| 0xB0 || u64 || TranslationTableBaseRegister0
|-
|-
| 0x38 || [[#KLinkedListNode]] || IncomingLightConnections
| 0xB8 || u64 || TranslationControlRegister
|-
|-
| 0x48 || [[#KPort]]* || Parent
| 0xC0 || u32 || AsidTagValue
|}
|}
</div>


== KClientPort ==
<div style="display: inline-block; vertical-align:top;">
Size: 0x38
{| class="wikitable" border="1"
 
Inherits from: [[#KSynchronizationObject]]
 
{| class="wikitable" border="1"
|-
|-
! Offset
! 5.0.0 Offset
! Type
! Type
! Description
! Description
|-
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0 || * || Vtable
|-
| 8 || u64 || AddrSpaceMinAddr
|-
|-
| 0x28 || u32 || NumSessions
| 0x10 || u64 || AddrSpaceMaxAddr
|-
|-
| 0x2C || u32 || MaxSessions
| 0x18 || u64 || HeapRegionBaseAddr
|-
|-
| 0x30 || [[#KPort]]* || Parent
| 0x20 || u64 || HeapRegionEndAddr
|}
 
= KSession =
Size: 0xB0
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x28 || u64 || HeapCurAddr
! Type
|-
! Description
| 0x30 || u64 || MapRegionBaseAddr
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0x38 || u64 || MapRegionEndAddr
|-
|-
| 0x10 || [[#KServerSession]] || ServerSide
| 0x40 || u64 || NewMapRegionBaseAddr
|-
|-
| 0x70 || [[#KClientSession]] || ClientSide
| 0x48 || u64 || NewMapRegionEndAddr
|-
|-
| 0xA8 || bool || HasInited
| 0x50 || u64 || TlsIoRegionBaseAddr
|}
 
== KServerSession ==
Size: 0x60
 
Inherits from: [[#KSynchronizationObject]]
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| 0x58 || u64 || TlsIoRegionEndAddr
|-
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0x60 || u64 || HeapMaxAllocation
|-
|-
| 0x28 || KLinkedListNode || NodeFor__IncomingConnections
| 0x68 || ||  
|-
|-
| 0x38 || [[#KSession*]] || Parent
| 0x70 || ||  
|-
|-
| 0x40 || KLinkedListNode<[[#KSessionRequest]]*> || RequestList
| 0x78 || [[#KMutex]] || Mutex
|-
|-
| 0x50 || [[#KSessionRequest]]* || ActiveRequest
| 0x80 || [[#KPageTable]] || PageTable
|-
|-
| 0x58 || ||
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager
|}
 
=== KSessionRequest ===
Size: 0x158
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || * || Vtable
|-
| 0x10 || KLinkedListNode ||  NodeFor__RequestList
|-
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable
|-
|-
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable
| 0xA8 || u32 || ?
|-
|-
| 0x128 || u8 || NumSendBuffers
| 0xAC || u32 || AddressSpaceWidth (32/36/39)
|-
|-
| 0x129 || u8 || NumRecvBuffers
| 0xB0 || [[#KLinkedList]]? ||  
|-
|-
| 0x12A || u8 || NumExchBuffers
| 0xC8 || ||  
|-
|-
| 0x130 || [[#KThread]]* || SenderThread
| 0xD0 || ||  
|-
|-
| 0x138 || u64 || InitiallyZero
| 0xD8 || ptr ||  
|-
|-
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent
| 0xE0 || u64 || TranslationTableBaseRegister0 val
|-
|-
| 0x148 || u64 || CustomCmdbufAddr
| 0xE8 || u64 || TranslationControlRegister val
|-
|-
| 0x150 || u64 || CustomCmdbufSize
| 0xF0 || u32 || AsidTagValue
|}
|}
</div>
== KPageTable ==
Size: 0x10


=== KBufferDescriptor ===
Size: 0x20
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
! Offset
! Type
! Description
|-
|-
| 0 || u64 || UserVirtAddr
| 0 || void* || RawPageTablePtr
|-
|-
| 8 || u64 || Size
| 8 || bool ||
|-
| 0x10 || u64 ||
|-
| 0x18 || u64 || BufferMemoryState
|-
|-
| 0xC || u32 || AddrSpaceSizeInGb
|}
|}


== KClientSession ==
== KMemoryBlockManager ==
Size: 0x38
Size: 0x18
 
Inherits from: [[#KAutoObject]]


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 880: Line 900:
! Description
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KMemoryBlock]]* || MemoryBlockList
|-
|-
| 0x10 || [[#KSession]]* || Parent
| 8 || u64 || MaxAddr
|-
|-
| 0x18 || bool || HasInited
| 0x10 || u64 || MinAddr
|-
| 0x20 || [[#KClientPort]]* || ParentPort
|-
| 0x28 || ||
|-
| 0x30 || [[#KProcess]]* || CreatorProcess
|}
|}


= KLightSession =
== KMemoryBlock ==
Size: 0xA8
Size: 0x40
 
Inherits from: [[#KAutoObject]]


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 904: Line 916:
! Description
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]] *> || NodeFor__MemoryBlockList
|-
| 0x10 || ||
|-
| 0x18 || ||
|-
|-
| 0x10 || [[#KLightSessionServer]] || ServerSide
| 0x20 || u64 || BaseAddress
|-
|-
| 0x68 || [[#KLightSessionClient]] || ClientSide
| 0x28 || u64 || NumOfPages
|-
|-
| 0xA0 || bool || HasInited
| 0x30 || u32 || State
|}
 
== KLightServerSession ==
Size: 0x58
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x34 || u16 || IpcRefCount [?]
! Type
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0x36 || u16 || DeviceMapRefCount
|-
|-
| 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections
| 0x38 || u8 || Permission
|-
|-
| 0x20 || [[#KLightSession]] || Parent
| 0x39 || u8 || UnkAttribute
|-
|-
| 0x28 || u64[6] ||
| 0x3A || u8 || Attribute
|}
|}


== KLightClientSession ==
== KMemoryBlockInfo ==
Size: 0x38
Size: 0x20
 
Inherits from: [[#KAutoObject]]


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 944: Line 948:
! Description
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0 || u64 || BaseAddress
|-
| 8 || u64 || Size
|-
| 0x10 || u32 || State
|-
|-
| 0x10 || [[#KLightSession]]* || Parent
| 0x14 || u8 || Permission
|-
|-
| 0x18 || bool || HasInited
| 0x15 || u8 || Attribute
|-
|-
| 0x20 || [[#KClientPort]]* || Port
| 0x16 || u8 || UnkAttribute
|-
|-
| 0x28 || ||
| 0x18 || u16 || IpcRefCount [?]
|-
|-
| 0x30 || [[#KProcess]]* || CreatorProcess
| 0x1A || u16 || DeviceMapRefCount
|}
|}


= KEvent =
= KTransferMemory =
Size: 0x70
Size: 0x48


Inherits from: [[#KAutoObject]]
Inherits from: [[#KAutoObject]]
Line 970: Line 978:
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0x10 || [[#KReadableEvent]] || ReadableEvent
| 0x10 || KMemoryBlockList || Blocks
|-
| 0x28 || [[#KProcess]]* || OwnerProcess
|-
|-
| 0x48 || [[#KWritableEvent]] || WritableEvent
| 0x30 || u64 || BaseAddress
|-
|-
| 0x60 || [[#KProcess]]* || Creator
| 0x38 || KMutex || Mutex
|-
|-
| 0x68 || bool || HasInited
| 0x40 || int || Permission
|-
| 0x44 || bool || HasInited
|-
| 0x45 || bool || IsMapped
|}
|}


== KReadableEvent ==
= KSharedMemory =
Size: 0x38
[1.0.0] Size: 0x40
 
[2.0.0] Size: 0x48


Inherits from: [[#KSynchronizationEvent]]
Inherits from: [[#KAutoObject]]


<div style="display: inline-block;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 1.0.0 Offset || Type || Description
! Type
|-
! Description
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0x10 || KMemoryBlockList || Blocks
|-
|-
| 0x28 || bool ||
| 0x28 || [[#KProcess]]* || OwnerProcess
|-
|-
| 0x30 || [[#KEvent]]* || Parent
| 0x30 || int || LocalPermission
|-
| 0x34 || int || RemotePermission
|-
| 0x38 || bool || HasInited
|}
|}
</div>


== KWritableEvent ==
<div style="display: inline-block; vertical-align:top;">
Size: 0x18
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 2.0.0 Offset || Type || Description
! Type
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0x10 || [[#KEvent]]* || Parent
| 0x10 || KMemoryBlockList || Blocks
|}
|-
 
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit
== KInterruptEvent ==
|-
[1.0.0] Size: 0x50
| 0x30 || u64 || OwnerProcessPid
 
[2.0.0] Size: 0x48
 
Inherits from: [[#KReadableEvent]]
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
| 0x38 || int || LocalPermission
|-
|-
| 0 || [[#KReadableEvent]] || Inheritance
| 0x3C || int || RemotePermission
|-
|-
| 0x38 || [[#KInterruptReceiver]] || Receiver
| 0x40 || bool || HasInited
|-
| 0x48 || u32 || IrqId (or -1)
|}
|}
</div>
</div>


<div style="display: inline-block; vertical-align:top;">
= KJitMemory =
[4.0.0+] Size: 0x58
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
! Offset || Type || Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0 || [[#KReadableEvent]] || Inheritance
| 0x20 || KMemoryBlockList || Blocks
|-
|-
| 0x38 || [[#KIrqRegistrationRef]]* || Reference
| 0x38 || [[#KProcess]]* || SrcProcessPtr
|-
|-
| 0x40 || u32 || IrqId (or -1)
| 0x40 || u64 || SrcAddr
|-
|-
| 0x44 || bool || IsIrqRegistered
| 0x48 || [[#KMutex]] || Mutex
|}
</div>
 
=== KInterruptReceiver ===
[1.0.0] Size: 0x10
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| 0x50 || u8 || HasInit
|-
|-
| 0 || * || Vtable
| 0x51 || u8 || HasMappedSlave
|-
|-
| 8 || u64 ||
| 0x52 || u8 || HasMappedMaster
|}
|}


=== KIrqRegistrationRef ===
= KPort =
[2.0.0] Size: 0x20
[1.0.0] Size: 0xA8
 
[7.0.0] Size: 0x110
 
Inherits from: [[#KAutoObject]]
 


<div style="display: inline-block;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
! 1.0.0 Offset
! Type
! Description
|-
|-
| 0 || * || Vtable
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 8 || u64 || InitiallyZero
| 0x10 || [[#KServerPort]] || ServerSide
|-
|-
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr
| 0x60 || [[#KClientPort]] || ClientSide
|-
| 0x98 || u64 ||
|-
| 0xA0 || bool || HasInited
|-
|-
| 0x18 || s32 || IrqId
| 0xA1 || bool || IsLight
|}
|}
</div>


= KDeviceAddressSpace =
<div style="display: inline-block; vertical-align:top;">
Size: 0x70
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 7.0.0 Offset
! Type
! Type
! Description
! Description
Line 1,089: Line 1,105:
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0x10 || [[#KRecursiveLock]] || Mutex
| 0x30 || [[#KServerPort]] || ServerSide
|-
|-
| 0x18 || [[#KSmmuManager]] || Manager
| 0xA0 || [[#KClientPort]] || ClientSide
|-
| 0xF8 || u64 ||
|-
|-
| 0x58 || u64 || BaseAddress
| 0x100 || char* || NamePtr
|-
|-
| 0x60 || u64 || Size
| 0x108 || bool || HasInited
|-
|-
| 0x68 || bool || HasInited
| 0x109 || bool || IsLight
|}
|}
</div>


[1.0.0] It was called KAddressSpace.
== KServerPort ==
Size: 0x50


== KSmmuManager ==
Inherits from: [[#KSynchronizationObject]]
Size: 0x40


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,111: Line 1,130:
! Description
! Description
|-
|-
| 0 || u8[4] || PageTableAsids
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
|-
| 8 || void*[4] || PageDirectories
| 0x28 || [[#KLinkedListNode]] || IncomingConnections
|-
|-
| 0x28 || u64 || AttachedDevicesMask
| 0x38 || [[#KLinkedListNode]] || IncomingLightConnections
|-
|-
| 0x30 || u32 || RegVal32Bit
| 0x48 || [[#KPort]]* || Parent
|-
| 0x34 || u32 || RegVal32BitEmpty
|-
| 0x38 || u32 || RegVal36Bit
|-
| 0x3C || u32 || RegVal36BitEmpty
|}
|}


= KResourceLimit =
== KClientPort ==
Size: 0x68
Size: 0x38


Inherits from: [[#KAutoObject]]
Inherits from: [[#KSynchronizationObject]]


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,137: Line 1,150:
! Description
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
|-
| 0x10 || u64[5] || CurrentValue
| 0x28 || u32 || NumSessions
|-
|-
| 0x38 || u64[5] || LimitValue
| 0x2C || u32 || MaxSessions
|-
|-
| 0x60 || [[#KRecursiveLock]] || Mutex
| 0x30 || [[#KPort]]* || Parent
|}
|}


= KPoolManager =
= KSession =
[1.0.0] Size: 0x380
Size: 0xB0


[2.0.0] Size: 0x450
Inherits from: [[#KAutoObject]]


<div style="display: inline-block;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
! Offset
! Type
! Description
|-
|-
| 0 || [[#KPoolAllocator]][3] || Allocator
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0x348 || [[#KPoolRefManager]] || RefManager
| 0x10 || [[#KServerSession]] || ServerSide
|-
|-
| 0x368 || u64 || AllocationCounter
| 0x70 || [[#KClientSession]] || ClientSide
|-
|-
| 0x370 || u64 ||
| 0xA8 || bool || HasInited
|-
| 0x378 || [[#KRecursiveLock]] || Mutex
|}
|}
</div>


<div style="display: inline-block; vertical-align:top;">
== KServerSession ==
Size: 0x60
 
Inherits from: [[#KSynchronizationObject]]
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
! Offset || Type || Description
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
| 0x28 || KLinkedListNode ||  NodeFor__IncomingConnections
|-
|-
| 0 || [[#KPoolAllocator]] || Allocator0
| 0x38 || [[#KSession*]] || Parent
|-
|-
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0
| 0x40 || KLinkedListNode<[[#KSessionRequest]]*> || RequestList
|-
|-
| 0x228 || [[#KPoolAllocator]] || Allocator1
| 0x50 || [[#KSessionRequest]]* || ActiveRequest
|-
|-
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1
| 0x58 || [[#KMutex]] || lock
|}
|}
</div>


== KPoolAllocator ==
=== KSessionRequest ===
[1.0.0] Size: 0x118
Size: 0x158


[2.0.0] Size: 0x220
Inherits from: [[#KAutoObject]]


<div style="display: inline-block;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 1.0.0 Offset || Type || Description
! Offset || Type || Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || KLinkedListNode ||  NodeFor__RequestList
|-
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable
|-
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable
|-
| 0x128 || u8 || NumSendBuffers
|-
| 0x129 || u8 || NumRecvBuffers
|-
| 0x12A || u8 || NumExchBuffers
|-
| 0x130 || [[#KThread]]* || SenderThread
|-
| 0x138 || u64 || InitiallyZero
|-
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent
|-
|-
| 0 || void* || MemoryBase
| 0x148 || u64 || CustomCmdbufAddr
|-
| 0x150 || u64 || CustomCmdbufSize
|}
 
=== KBufferDescriptor ===
Size: 0x20
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || u64 || UserVirtAddr
|-
| 8 || u64 || Size
|-
| 0x10 || u64 ||
|-
| 0x18 || u64 || BufferMemoryState
|-
|}
 
== KClientSession ==
Size: 0x38
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || [[#KSession]]* || Parent
|-
| 0x18 || bool || HasInited
|-
| 0x20 || [[#KClientPort]]* || ParentPort
|-
| 0x28 || ||
|-
| 0x30 || [[#KProcess]]* || CreatorProcess
|}
 
= KLightSession =
Size: 0xA8
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || [[#KLightSessionServer]] || ServerSide
|-
| 0x68 || [[#KLightSessionClient]] || ClientSide
|-
| 0xA0 || bool || HasInited
|}
 
== KLightServerSession ==
Size: 0x58
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections
|-
| 0x20 || [[#KLightSession]] || Parent
|-
| 0x28 || u64[6] ||
|}
 
== KLightClientSession ==
Size: 0x38
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || [[#KLightSession]]* || Parent
|-
| 0x18 || bool || HasInited
|-
| 0x20 || [[#KClientPort]]* || Port
|-
| 0x28 || ||
|-
| 0x30 || [[#KProcess]]* || CreatorProcess
|}
 
= KEvent =
Size: 0x70
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || [[#KReadableEvent]] || ReadableEvent
|-
| 0x48 || [[#KWritableEvent]] || WritableEvent
|-
| 0x60 || [[#KProcess]]* || Creator
|-
| 0x68 || bool || HasInited
|}
 
== KReadableEvent ==
Size: 0x38
 
Inherits from: [[#KSynchronizationEvent]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
| 0x28 || bool ||
|-
| 0x30 || [[#KEvent]]* || Parent
|}
 
== KWritableEvent ==
Size: 0x18
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || [[#KEvent]]* || Parent
|}
 
== KInterruptEvent ==
[1.0.0] Size: 0x50
 
[2.0.0] Size: 0x48
 
Inherits from: [[#KReadableEvent]]
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
|-
! 1.0.0 Offset || Type || Description
|-
| 0 || [[#KReadableEvent]] || Inheritance
|-
| 0x38 || [[#KInterruptReceiver]] || Receiver
|-
| 0x48 || u32 || IrqId (or -1)
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 2.0.0 Offset || Type || Description
|-
| 0 || [[#KReadableEvent]] || Inheritance
|-
| 0x38 || [[#KInterruptReceiver]]* || Receiver
|-
| 0x40 || u32 || IrqId (or -1)
|-
| 0x44 || bool || IsIrqRegistered
|}
</div>
 
=== KInterruptReceiver ===
[1.0.0] Size: 0x10
[2.0.0] Size: 0x20
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || * || Vtable
|-
| 8 || u64 ||
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || * || Vtable
|-
| 8 || u64 || InitiallyZero
|-
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr
|-
| 0x18 || s32 || IrqId
|}
</div>
 
= KDeviceAddressSpace =
Size: 0x70
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || [[#KMutex]] || Mutex
|-
| 0x18 || [[#KSmmuManager]] || Manager
|-
| 0x58 || u64 || BaseAddress
|-
| 0x60 || u64 || Size
|-
| 0x68 || bool || HasInited
|}
 
[1.0.0] It was called KAddressSpace.
 
== KSmmuManager ==
Size: 0x40
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || u8[4] || PageTableAsids
|-
| 8 || void*[4] || PageDirectories
|-
| 0x28 || u64 || AttachedDevicesMask
|-
| 0x30 || u32 || RegVal32Bit
|-
| 0x34 || u32 || RegVal32BitEmpty
|-
| 0x38 || u32 || RegVal36Bit
|-
| 0x3C || u32 || RegVal36BitEmpty
|}
 
= KResourceLimit =
Size: 0x68
 
Inherits from: [[#KAutoObject]]
 
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || u64[5] || CurrentValue
|-
| 0x38 || u64[5] || LimitValue
|-
| 0x60 || [[#KMutex]] || Mutex
|}
 
= KPoolManager =
[1.0.0] Size: 0x380
 
[2.0.0] Size: 0x450
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
|-
! 1.0.0 Offset || Type || Description
|-
| 0 || [[#KPoolAllocator]][3] || Allocator
|-
| 0x348 || [[#KPoolRefManager]] || RefManager
|-
| 0x368 || u64 || AllocationCounter
|-
| 0x370 || u64 ||
|-
| 0x378 || [[#KMutex]] || Mutex
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 2.0.0 Offset || Type || Description
|-
| 0 || [[#KPoolAllocator]] || Allocator0
|-
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0
|-
| 0x228 || [[#KPoolAllocator]] || Allocator1
|-
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1
|}
</div>
 
== KPoolAllocator ==
[1.0.0] Size: 0x118
 
[2.0.0] Size: 0x220
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
|-
! 1.0.0 Offset || Type || Description
|-
| 0 || void* || MemoryBase
|-
| 8 || u64 || MemorySize
|-
| 0x10 || s32 || NumPools
|-
| 0x18 || [[#KPool]][8] || Pools
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 2.0.0 Offset || Type || Description
|-
| 0 || void* || MemoryBase
|-
|-
| 8 || u64 || MemorySize
| 8 || u64 || MemorySize
|-
|-
| 0x10 || s32 || NumPools
| 0x10 || [[#KPool]][8] || Pools
|-
|-
| 0x18 || [[#KPool]][8] || Pools
| 0x210 || s32 || NumPools
|}
|}
</div>
</div>
 
 
<div style="display: inline-block; vertical-align:top;">
=== KPool ===
{| class="wikitable" border="1"
[1.0.0] Size: 0x20
|-
 
! 2.0.0 Offset || Type || Description
[2.0.0] Size: 0x40
|-
 
| 0 || void* || MemoryBase
<div style="display: inline-block;">
|-
{| class="wikitable" border="1"
| 8 || u64 || MemorySize
|-
! 1.0.0 Offset || Type || Description
|-
| 0 || KPoolHeader* || FirstFreeChunk
|-
| 8 || u64 ||
|-
| 0x10 || u64 ||
|-
| 0x18 || void* || SingletonTableEntryPtr
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 2.0.0 Offset || Type || Description
|-
| 0 || KPoolHeader* || FirstFreeChunk
|-
| 8 || u64 ||
|-
| 0x10 || u64 ||
|-
| 0x18 || void* || SingletonTableEntryPtr
|-
| 0x20 || [[#KPool]]* || Parent
|-
| 0x30 || u64[2] || DmaProtectionKey
|}
</div>
 
== KPoolRefManager ==
[1.0.0] Size: 0x20
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KPoolManager]]* || Parent
|-
| 8 || void* || PoolBase
|-
| 0x10 || u64 || MaxPage
|-
| 0x18 || u16* || RefCountTable
|}
 
= KObjectAllocator =
Size: 0x50
[5.0.0]? Size: 0x48
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KLockedList]] || LockedList
|-
| 0x28 || [[#KSlabHeap]] || SlabHeap
|}
 
 
= KSlabHeap =
Size: 0x28
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || void* || FreeListHead
|-
| 0x8 || u64 ||
|-
| 0x10 || void* || HeapPtr
|-
| 0x18 || u64 || TotalHeapSize
|-
| 0x20 || u64 || SingleObjectSize
|}
 
5.0.0 (?):
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || void* || FreeListHead
|-
| 0x8 || u64 || SingleObjectSize
|-
| 0x10 || void* || HeapPtr
|-
| 0x18 || void* || Start (equal to HeapPtr on init)
|-
| 0x20 || void* || End
|}
 
= KPageTableAllocator =
Size: 0x30
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || u64 ||
|-
| 0x10 || u16* || RefCountTable
|-
| 0x10 || void* || BaseAddress
|-
| 0x18 || u64 || Size
|-
| 0x20 || u64 ||
|-
| 0x28 || u64 ||
|}
 
= KIrqManager =
[1.0.0] Size: 0x1608
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KIrqEntry]][32] || Core0Irq
|-
| 0x200 || [[#KIrqEntry]][32] || Core1Irq
|-
| 0x400 || [[#KIrqEntry]][32] || Core2Irq
|-
| 0x600 || [[#KIrqEntry]][32] || Core3Irq
|-
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs
|-
| 0x1600 || [[#KMutex]] || Mutex
|}
 
== KIrqEntry ==
[1.0.0] Size: 0x10
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KInterruptReceiver]]* || Receiver
|-
| 8 || u8 || State0
|-
| 9 || u8 || State1
|}
 
= KDebug =
Size: 0x50
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
| 0x28 || [[#KLinkedListNode]]<[[#KDebugEvent]]> || EventList
|-
| 0x38 || u32 || Flags
|-
| 0x40 || [[#KProcess]]* || ProcessPtr
|-
| 0x48 || [[#KMutex]] || Mutex
|}
 
== KDebugEvent ==
Size: 0x60
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KLinkedListNode]]<[[#KDebugEvent]] *> || NodeFor__EventList
|-
| 0x10 || u32 || EventType
|-
| 0x14 || u32 || ThreadId
|-
| 0x18 || u32 || Flags
|-
| 0x1C || u16 ||
|-
| 0x1E || bool ||
|-
| 0x20 || ... || ...
|}
 
= KManagedPort =
Size: 0x28
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KLinkedListNode]]<[[#KManagedPort]] *> || NodeFor__ManagedPortList
|-
|-
| 0x10 || [[#KPool]][8] || Pools
| 0x10 || char[12] || PortName
|-
|-
| 0x210 || s32 || NumPools
| 0x20 || [[#KClientPort]]* || ClientPort
|}
|}
</div>


=== KPool ===
= Slab Information =
[1.0.0] Size: 0x20


[2.0.0] Size: 0x40
The Horizon/NX kernel keeps all objects in slab allocators, that can allocate a fixed amount of each. Attempting to allocate an object when the slab heap is full will result in an error 0xCE01 (Resource Exhaustion).
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
|-
! 1.0.0 Offset || Type || Description
|-
| 0 || KPoolHeader* || FirstFreeChunk
|-
| 8 || u64 ||
|-
| 0x10 || u64 ||
|-
| 0x18 || void* || SingletonTableEntryPtr
|}
</div>


<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
! Object || Slab Count
|-
| 0 || KPoolHeader* || FirstFreeChunk
|-
| 8 || u64 ||
|-
|-
| 0x10 || u64 ||
| KEvent || 600
|-
|-
| 0x18 || void* || SingletonTableEntryPtr
| KInterruptEvent || 100
|-
|-
| 0x20 || [[#KPool]]* || Parent
| KProcess || 80
|-
|-
| 0x30 || u64[2] || DmaProtectionKey
| KThread || 700
|}
</div>
 
== KPoolRefManager ==
[1.0.0] Size: 0x20
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| KPort || 200
|-
|-
| 0 || [[#KPoolManager]]* || Parent
| KSharedMemory || 80
|-
|-
| 8 || void* || PoolBase
| KTransferMemory || 200
|-
|-
| 0x10 || u64 || MaxPage
| KDeviceAddressSpace || 300
|-
|-
| 0x18 || u16* || RefCountTable
| KDebug || 4
|}
 
= KIrqManager =
[1.0.0] Size: 0x1608
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| KSession || 800
|-
|-
| 0 || [[#KIrqEntry]][32] || Core0Irq
| KLightSession || 100
|-
|-
| 0x200 || [[#KIrqEntry]][32] || Core1Irq
| KLinkedListEntry<void*> || 17 231
|-
|-
| 0x400 || [[#KIrqEntry]][32] || Core2Irq
| KLinkedListNode || 4 000
|-
|-
| 0x600 || [[#KIrqEntry]][32] || Core3Irq
| KMemoryBlock (System) || 20 000
|-
|-
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs
| KMemoryBlock (Other) || 10 000
|-
|-
| 0x1600 || [[#KRecursiveLock]] || Mutex
| KTlsPageManager || 167
|}
 
== KIrqEntry ==
[1.0.0] Size: 0x10
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| KManagedPort || 7
|-
|-
| 0 || [[#KIrqReciever*]] || Receiver
| KDebugEvent || 704
|-
|-
| 8 || u8 || State0
| KSessionRequest || 1 600
|-
|-
| 9 || u8 || State1
| KResourceLimit || 5
|}
|}