Kernel: Difference between revisions

TuxSH (talk | contribs)
Observed on 3.0 titles and 1.0 KIPs
m Hexkyz moved page Kernel objects to Kernel: Use this page for general kernel documentation
 
(30 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 9: Line 35:
|-
|-
| 8 || u32 || 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
|}
|}


Line 52: Line 82:
= KLockedList =
= KLockedList =
Size: 0x28
Size: 0x28
[5.0.0]? Size: 0x20


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 66: Line 98:
|}
|}


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


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 102: Line 147:
|}
|}


= KThread =
= KRedBlackTreeNode =
[1.0.0] Size: 0x620
Size: 0x20


Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]
Note: This is BSD sys/tree.h's RB_ENTRY(...).


<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
|-
|-
| 0x28 || KSchedulerObject0 || Inheritance
| 0 || KRedBlackTreeNode* || Left Child
|-
|-
| 0x48 || KSchedulerObject1 || Inheritance
| 8 || KRedBlackTreeNode* || Right Child
|-
|-
| 0x58 || KSchedulerObject2 || Inheritance
| 0x10 || KRedBlackTreeNode* || Parent
|-
|-
| 0x70 || KThreadContext || Context
| 0x18 || int || Color
|}
 
= KRedBlackTree =
Size: 0x8
 
Note: This is BSD sys/tree.h's RB_HEAD(..., KRedBlackTreeNode);
 
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || KRedBlackTreeNode* || Root
|-
|}
 
= 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"
|-
! 1.0.0 Offset || Type || Description
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
| 0x28 || KSchedulerObject0 || Inheritance
|-
| 0x48 || KSchedulerObject1 || Inheritance
|-
| 0x58 || KSchedulerObject2 || Inheritance
|-
| 0x70 || KThreadContext || Context
|-
|-
| 0x2F0 || u64 || CoreMask
| 0x2F0 || u64 || CoreMask
Line 134: Line 211:
| 0x318 || u64 ||
| 0x318 || u64 ||
|-
|-
| 0x320 || u64 ||
| 0x320 || u64 || CondVar_CondVarUserAddr
|-
|-
| 0x328 || u64 || Entrypoint
| 0x328 || u64 || Entrypoint
|-
|-
| 0x330 || u64 || ArbitrationUserPtr
| 0x330 || u64 || CondVar_MutexUserAddr
|-
|-
| 0x338 || [[#KProcess*]] || ProcessPtr
| 0x338 || [[#KProcess]]* || ProcessPtr
|-
|-
| 0x340 || void* || KernelThreadStack
| 0x340 || void* || KernelThreadStack
Line 152: Line 229:
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects
|-
|-
| 0x560 || u64 ||
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr
|-
|-
| 0x568 || u64 ||
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr
|-
|-
| 0x570 || [[#KSynchronizationObject]] || SignalledObjectPtr?
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr?
|-
|-
| 0x578 || KLinkedListNode ||
| 0x578 || KLinkedListNode ||
Line 166: Line 243:
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore
|-
|-
| 0x5B8 || u64 ||
| 0x5B8 || [[#KThread]]* ||
|-
|-
| 0x5C0 || u64 ||
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr
|-
|-
| 0x5C8 || u64 ||
| 0x5C8 || u64 ||
Line 176: Line 253:
| 0x5D8 || u64 ||
| 0x5D8 || u64 ||
|-
|-
| 0x5E0 || u32 || ArbitrationReqThreadHandle
| 0x5E0 || u32 || CondVar_WaitThreadHandle
|-
|-
| 0x5E4 || u32 || SchedulingFlags_Default
| 0x5E4 || u32 || SchedulingFlags_Default
Line 221: Line 298:


[3.0.0] Size: 0x2580
[3.0.0] Size: 0x2580
[5.0.0] Size: 0x4600


Inherits from: [[#KSynchronizationObject]]
Inherits from: [[#KSynchronizationObject]]
Line 231: Line 310:
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
|-
| 0x28 || KProcessScheduler || Scheduler
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.
|-
|-
| 0x38 || [[#KMemoryManager]] || MemoryManager
| 0x38 || [[#KMemoryManager]] || MemoryManager
Line 287: Line 366:
| 0x278 || u64 || MaxTotalMemUsage
| 0x278 || u64 || MaxTotalMemUsage
|-
|-
| 0x280 || u32 || Process category (0: regular title, 1: kernel built-in)
| 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)
|-
|-
| 0x288 || [[#KProcessHandleTable]] || HandleTable
| 0x288 || [[#KProcessHandleTable]] || HandleTable
Line 303: Line 382:
| 0x55C || u32 || UnusedZero
| 0x55C || u32 || UnusedZero
|-
|-
| 0x560 || u64[8] || UnusedZeroes
| 0x560 || u64[2] || UnusedZeroes
|-
| 0x570 || u64 || TotalTimeRunning
|-
| 0x578 || u64[5] || UnusedZeroes
|-
|-
| 0x5A0 || u64 || UnusedZero
| 0x5A0 || u64 || UnusedZero
Line 318: Line 401:
| 0 || [[#KSynchronizationObject]] || Inheritance
| 0 || [[#KSynchronizationObject]] || Inheritance
|-
|-
| 0x28 || KProcessScheduler || Scheduler
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.
|-
|-
| 0x38 || [[#KMemoryManager]] || MemoryManager
| 0x38 || [[#KMemoryManager]] || MemoryManager
Line 374: Line 457:
| 0x288 || u64 || MaxTotalMemUsage
| 0x288 || u64 || MaxTotalMemUsage
|-
|-
| 0x290 || u32 || Process category (0: regular title, 1: kernel built-in)
| 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)
|-
|-
| 0x298 || u64[5] || Unused [?]
| 0x298 || u64[5] || Unused [?]
Line 519: Line 602:


[2.0.0] Size: 8
[2.0.0] Size: 8
[5.0.0] Size: 0x10


<div style="display: inline-block">
<div style="display: inline-block">
Line 543: Line 628:
|-
|-
| 4 || u32 || ObjectCompressedPtr
| 4 || u32 || ObjectCompressedPtr
|}
</div>
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 5.0.0 Offset || Type || Description
|-
| 0 || u16 || HandleId
|-
| 2 || u16 || ObjectType
|-
| 8 || [[#KAutoObject]]* || object
|}
|}
</div>
</div>
Line 589: Line 687:


[2.0.0] Size: 0xC8
[2.0.0] Size: 0xC8
[5.0.0] Size: 0xF8?


<div style="display: inline-block">
<div style="display: inline-block">
Line 712: Line 812:
</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
! Type
! Description
! Description
|-
|-
| 0 || void* || RawPageTablePtr
| 0 || * || Vtable
|-
| 8 || u64 || AddrSpaceMinAddr
|-
|-
| 8 || bool ||
| 0x10 || u64 || AddrSpaceMaxAddr
|-
|-
| 0xC || u32 || AddrSpaceSizeInGb
| 0x18 || u64 || HeapRegionBaseAddr
|}
 
== KMemoryBlockManager ==
Size: 0x18
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x20 || u64 || HeapRegionEndAddr
! Type
! Description
|-
|-
| 0 || [[#KMemoryBlock]]* || MemoryBlockList
| 0x28 || u64 || HeapCurAddr
|-
|-
| 8 || u64 || MaxAddr
| 0x30 || u64 || MapRegionBaseAddr
|-
|-
| 0x10 || u64 || MinAddr
| 0x38 || u64 || MapRegionEndAddr
|}
 
== KMemoryBlock ==
Size: 0x40
 
{| class="wikitable" border="1"
|-
|-
! Offset
| 0x40 || u64 || NewMapRegionBaseAddr
! Type
! Description
|-
|-
| 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]] *> || NodeFor__MemoryBlockList
| 0x48 || u64 || NewMapRegionEndAddr
|-
|-
| 0x10 || ||
| 0x50 || u64 || TlsIoRegionBaseAddr
|-
| 0x58 || u64 || TlsIoRegionEndAddr
|-
| 0x60 || u64 || HeapMaxAllocation
|-
| 0x68 ||  ||
|-
| 0x70 ||  ||
|-
| 0x78 || [[#KMutex]] || Mutex
|-
| 0x80 || [[#KPageTable]] || PageTable
|-
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager
|-
|-
| 0x18 || ||
| 0xA8 || u32 || ?
|-
|-
| 0x20 || u64 || BaseAddress
| 0xAC || u32 || AddressSpaceWidth (32/36/39)
|-
|-
| 0x28 || u64 || NumOfPages
| 0xB0 || [[#KLinkedList]]? ||  
|-
|-
| 0x30 || u32 || State
| 0xC8 || ||  
|-
|-
| 0x34 || u16 || IpcRefCount [?]
| 0xD0 || ||  
|-
|-
| 0x36 || u16 || DeviceMapRefCount
| 0xD8 || ptr ||  
|-
|-
| 0x38 || u8 || Permission
| 0xE0 || u64 || TranslationTableBaseRegister0 val
|-
|-
| 0x39 || u8 || UnkAttribute
| 0xE8 || u64 || TranslationControlRegister val
|-
|-
| 0x3A || u8 || Attribute
| 0xF0 || u32 || AsidTagValue
|}
|}
</div>


== KMemoryBlockInfo ==
== KPageTable ==
Size: 0x20
Size: 0x10


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 785: Line 884:
! Description
! Description
|-
|-
| 0 || u64 || BaseAddress
| 0 || void* || RawPageTablePtr
|-
|-
| 8 || u64 || Size
| 8 || bool ||
|-
|-
| 0x10 || u32 || State
| 0xC || u32 || AddrSpaceSizeInGb
|}
 
== KMemoryBlockManager ==
Size: 0x18
 
{| class="wikitable" border="1"
|-
|-
| 0x14 || u8 || Permission
! Offset
! Type
! Description
|-
|-
| 0x15 || u8 || Attribute
| 0 || [[#KMemoryBlock]]* || MemoryBlockList
|-
|-
| 0x16 || u8 || UnkAttribute
| 8 || u64 || MaxAddr
|-
|-
| 0x18 || u16 || IpcRefCount [?]
| 0x10 || u64 || MinAddr
|-
| 0x1A || u16 || DeviceMapRefCount
|}
|}


= KTransferMemory =
== KMemoryBlock ==
Size: 0x48
Size: 0x40
 
Inherits from: [[#KAutoObject]]


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 813: Line 916:
! Description
! Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KLinkedListNode]]<[[#KMemoryBlock]] *> || NodeFor__MemoryBlockList
|-
| 0x10 || ||
|-
| 0x18 || ||
|-
| 0x20 || u64 || BaseAddress
|-
|-
| 0x10 || KMemoryBlockList || Blocks
| 0x28 || u64 || NumOfPages
|-
|-
| 0x28 || [[#KProcess]]* || OwnerProcess
| 0x30 || u32 || State
|-
|-
| 0x30 || u64 || BaseAddress
| 0x34 || u16 || IpcRefCount [?]
|-
|-
| 0x38 || KMutex || Mutex
| 0x36 || u16 || DeviceMapRefCount
|-
|-
| 0x40 || int || Permission
| 0x38 || u8 || Permission
|-
|-
| 0x44 || bool || HasInited
| 0x39 || u8 || UnkAttribute
|-
|-
| 0x45 || bool || IsMapped
| 0x3A || u8 || Attribute
|}
|}


= KSharedMemory =
== KMemoryBlockInfo ==
[1.0.0] Size: 0x40
Size: 0x20


[2.0.0] Size: 0x48
{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0 || u64 || BaseAddress
|-
| 8 || u64 || Size
|-
| 0x10 || u32 || State
|-
| 0x14 || u8 || Permission
|-
| 0x15 || u8 || Attribute
|-
| 0x16 || u8 || UnkAttribute
|-
| 0x18 || u16 || IpcRefCount [?]
|-
| 0x1A || u16 || DeviceMapRefCount
|}
 
= KTransferMemory =
Size: 0x48


Inherits from: [[#KAutoObject]]
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
| 0 || [[#KAutoObject]] || Inheritance
Line 848: Line 982:
| 0x28 || [[#KProcess]]* || OwnerProcess
| 0x28 || [[#KProcess]]* || OwnerProcess
|-
|-
| 0x30 || int || LocalPermission
| 0x30 || u64 || BaseAddress
|-
| 0x38 || KMutex || Mutex
|-
| 0x40 || int || Permission
|-
|-
| 0x34 || int || RemotePermission
| 0x44 || bool || HasInited
|-
|-
| 0x38 || bool || HasInited
| 0x45 || bool || IsMapped
|}
|}
</div>


<div style="display: inline-block; vertical-align:top;">
= KSharedMemory =
[1.0.0] Size: 0x40
 
[2.0.0] Size: 0x48
 
Inherits from: [[#KAutoObject]]
 
<div style="display: inline-block;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 2.0.0 Offset || Type || Description
! 1.0.0 Offset || Type || Description
|-
|-
| 0 || [[#KAutoObject]] || Inheritance
| 0 || [[#KAutoObject]] || Inheritance
Line 865: Line 1,009:
| 0x10 || KMemoryBlockList || Blocks
| 0x10 || KMemoryBlockList || Blocks
|-
|-
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit
| 0x28 || [[#KProcess]]* || OwnerProcess
|-
|-
| 0x30 || u64 || OwnerProcessPid
| 0x30 || int || LocalPermission
|-
|-
| 0x38 || int || LocalPermission
| 0x34 || int || RemotePermission
|-
| 0x38 || bool || HasInited
|}
</div>
 
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 2.0.0 Offset || Type || Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x10 || KMemoryBlockList || Blocks
|-
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit
|-
| 0x30 || u64 || OwnerProcessPid
|-
| 0x38 || int || LocalPermission
|-
|-
| 0x3C || int || RemotePermission
| 0x3C || int || RemotePermission
Line 905: Line 1,068:


= KPort =
= KPort =
Size: 0xA8
[1.0.0] Size: 0xA8
 
[7.0.0] Size: 0x110


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


<div style="display: inline-block;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 1.0.0 Offset
! Type
! Type
! Description
! Description
Line 927: Line 1,094:
| 0xA1 || bool || IsLight
| 0xA1 || bool || IsLight
|}
|}
</div>


== KServerPort ==
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 7.0.0 Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x30 || [[#KServerPort]] || ServerSide
|-
| 0xA0 || [[#KClientPort]] || ClientSide
|-
| 0xF8 || u64 ||
|-
| 0x100 || char* || NamePtr
|-
| 0x108 || bool || HasInited
|-
| 0x109 || bool || IsLight
|}
</div>
 
== KServerPort ==
Size: 0x50
Size: 0x50


Line 1,007: Line 1,198:
| 0x50 || [[#KSessionRequest]]* || ActiveRequest
| 0x50 || [[#KSessionRequest]]* || ActiveRequest
|-
|-
| 0x58 || ||
| 0x58 || [[#KMutex]] || lock
|}
|}


=== KSessionRequest ===
=== KSessionRequest ===
Size: 0x158
Size: 0x158
Inherits from: [[#KAutoObject]]


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,017: Line 1,210:
! Offset || Type || Description
! Offset || Type || Description
|-
|-
| 0 || * || Vtable
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0x10 || KLinkedListNode ||  NodeFor__RequestList
| 0x10 || KLinkedListNode ||  NodeFor__RequestList
Line 1,467: Line 1,660:
= KObjectAllocator =
= KObjectAllocator =
Size: 0x50
Size: 0x50
[5.0.0]? Size: 0x48


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,496: Line 1,690:
|}
|}


 
5.0.0 (?):
= KPageTableAllocator =
Size: 0x30
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
! Offset || Type || Description
|-
|-
| 0 || u64 ||
| 0 || void* || FreeListHead
|-
|-
| 0x10 || u16* || RefCountTable
| 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
| 0x10 || void* || BaseAddress
Line 1,544: Line 1,753:
! Offset || Type || Description
! Offset || Type || Description
|-
|-
| 0 || [[#KIrqReciever*]] || Receiver
| 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 || char[12] || PortName
|-
| 0x20 || [[#KClientPort]]* || ClientPort
|}
 
= Slab Information =
 
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).
 
{| class="wikitable" border="1"
|-
! Object || Slab Count
|-
| KEvent || 600
|-
| KInterruptEvent || 100
|-
| KProcess || 80
|-
| KThread || 700
|-
|-
| 8 || u8 || State0
| KPort || 200
|-
|-
| 9 || u8 || State1
| KSharedMemory || 80
|}
 
= KDebug =
Size: 0x50
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| KTransferMemory || 200
|-
|-
| 0 || [[#KSynchronizationObject]] || Inheritance
| KDeviceAddressSpace || 300
|-
|-
| 0x28 || [[#KLinkedListNode]]<[[#KDebugEvent]]> || EventList
| KDebug || 4
|-
|-
| 0x38 || u32 || Flags
| KSession || 800
|-
|-
| 0x40 || [[#KProcess]]* || ProcessPtr
| KLightSession || 100
|-
|-
| 0x48 || [[#KMutex]] || Mutex
| KLinkedListEntry<void*> || 17 231
|}
 
== KDebugEvent ==
Size: 0x60
 
{| class="wikitable" border="1"
|-
|-
! Offset || Type || Description
| KLinkedListNode || 4 000
|-
|-
| 0 || [[#KLinkedListNode]]<[[#KDebugEvent]] *> || NodeFor__EventList
| KMemoryBlock (System) || 20 000
|-
|-
| 0x10 || u32 || EventType
| KMemoryBlock (Other) || 10 000
|-
|-
| 0x14 || u32 || ThreadId
| KTlsPageManager || 167
|-
|-
| 0x18 || u32 || Flags
| KManagedPort || 7
|-
|-
| 0x1C || u16 ||
| KDebugEvent || 704
|-
|-
| 0x1E || bool ||
| KSessionRequest || 1 600
|-
|-
| 0x20 || ... || ...
| KResourceLimit || 5
|}
|}