Difference between revisions of "KProcess"
Jump to navigation
Jump to search
Line 142: | Line 142: | ||
|- | |- | ||
| 0xD4 | | 0xD4 | ||
− | | | + | | KProcessHandleTable |
− | | | + | | This is the data for tracking and using all of the KProcess's handles. |
|} | |} | ||
+ | |||
+ | |||
+ | KProcessHandleTable info struct: | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | HandleData* | ||
+ | | Pointer to the process's handle table. | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | u16 | ||
+ | | The max number of handles that can be open at once. | ||
+ | |- | ||
+ | | 0x6 | ||
+ | | u16 | ||
+ | | Unknown | ||
+ | |- | ||
+ | | 0x8 | ||
+ | | HandleData* | ||
+ | | Pointer to the next available HandleData entry in the handle table. | ||
+ | |- | ||
+ | | 0xC | ||
+ | | u16 | ||
+ | | Total handles used by this KProcess. | ||
+ | |- | ||
+ | | 0xE | ||
+ | | u16 | ||
+ | | The current number of handles in use. | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | u32 | ||
+ | | Unknown | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | u32 | ||
+ | | Unknown | ||
+ | |- | ||
+ | | 0x16 | ||
+ | | u32 | ||
+ | | Unknown | ||
+ | |} | ||
+ | |||
+ | |||
+ | HandleData struct: | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | u32 | ||
+ | | Handle info | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | u32 | ||
+ | | Pointer to the kernel object that the handle references. | ||
+ | |} | ||
+ | |||
+ | The handle info u32 works as such: | ||
+ | |||
+ | The high byte is a remainder from the pointer to the next entry that originally occupied the handle table entry. It is unused. Byte 2 is either the class type token starting with firmware version 9.0 or the lowest byte of the char* that points to the class type name in firmware versions below 9.0. The lower halfword is the handle number of the current handle taken from the total handle count for the KProcess that owns the table. |
Revision as of 07:54, 25 January 2015
class KProcess extends KSynchronizationObject;
Size : 0x260 bytes
Offset | Type | Description |
---|---|---|
0x0 | u32 | Pointer to vtable |
0x4 | u32 | Reference count |
0x54 | u32 | Virtual address of the MMU table for this process |
0x6C | s32 | Ideal processor |
0x7C | u32 | Number of threads which belong to this process. |
0x79 | u8 | Proc affinity mask |
0x80 | 0x10-bytes | SVC access control mask from the exheader kernel descriptors. |
0xA0 | u32 | Kernel flags from the exheader kernel descriptors. |
0xA4 | u16 | Handle table size from the exheader kernel descriptors. When this is 0, handle table is stored in WRAM. |
0xA6 | u16 | Kernel release version field, from the exheader kernel descriptors. |
0xA8 | u32 | Pointer to KCodeSet instance |
0xAC | u32 | Process id, this always begins at 0x0 for the first process. |
0xB8 | KThread* | Pointer to the process's main (?) thread. |
0xCC | void* | Pointer to the process's handle table. |
Structure for 8.0.0-18 NATIVE_FIRM:
Size : 0x268 bytes
Offset | Type | Description |
---|---|---|
0x0 | u32 | Pointer to vtable |
0x4 | u32 | Reference count |
0x4C | u32 | End of userland virtual memory for the process |
0x50 | u32* | LINEAR memory virtual address(userland) base for this process. |
0x58 | u32 | Size of the MMU table |
0x5C | u32 | Virtual address of the MMU table for this process |
0x74 | s32 | Ideal processor for this process |
0x7C | u32 | Pointer to resource limits for process. |
0x84 | u32 | Number of threads which belong to this process. |
0x88 | 0x10-bytes | SVC access control mask from the exheader kernel descriptors. |
0xA8 | u32 | Kernel flags from the exheader kernel descriptors. |
0xAC | u16 | Handle table size from the exheader kernel descriptors. When this is 0, handle table is stored in WRAM. |
0xAE | u16 | Kernel release version field, from the exheader kernel descriptors. |
0xB0 | u32 | Pointer to KCodeSet instance |
0xB4 | u32 | Process id, this always begins at 0x0 for the first process. |
0xC0 | KThread* | Pointer to the process's main (?) thread. |
0xD4 | KProcessHandleTable | This is the data for tracking and using all of the KProcess's handles. |
KProcessHandleTable info struct:
Offset | Type | Description |
---|---|---|
0x0 | HandleData* | Pointer to the process's handle table. |
0x4 | u16 | The max number of handles that can be open at once. |
0x6 | u16 | Unknown |
0x8 | HandleData* | Pointer to the next available HandleData entry in the handle table. |
0xC | u16 | Total handles used by this KProcess. |
0xE | u16 | The current number of handles in use. |
0x10 | u32 | Unknown |
0x14 | u32 | Unknown |
0x16 | u32 | Unknown |
HandleData struct:
Offset | Type | Description |
---|---|---|
0x0 | u32 | Handle info |
0x4 | u32 | Pointer to the kernel object that the handle references. |
The handle info u32 works as such:
The high byte is a remainder from the pointer to the next entry that originally occupied the handle table entry. It is unused. Byte 2 is either the class type token starting with firmware version 9.0 or the lowest byte of the char* that points to the class type name in firmware versions below 9.0. The lower halfword is the handle number of the current handle taken from the total handle count for the KProcess that owns the table.