Line 3: |
Line 3: |
| = System calls = | | = System calls = |
| {| class=wikitable | | {| class=wikitable |
− | ! Id || Return Type || Name || Arguments | + | ! ID || Return Type || Name || Arguments |
| |- | | |- |
| | 0x01 || Result || [[#SetHeapSize|SetHeapSize]] || uintptr_t *out_address, size_t size | | | 0x01 || Result || [[#SetHeapSize|SetHeapSize]] || uintptr_t *out_address, size_t size |
Line 95: |
Line 95: |
| | [3.0.0+] 0x2D || Result || [[#UnmapPhysicalMemory|UnmapPhysicalMemory]] || uintptr_t address, size_t size | | | [3.0.0+] 0x2D || Result || [[#UnmapPhysicalMemory|UnmapPhysicalMemory]] || uintptr_t address, size_t size |
| |- | | |- |
− | | [5.0.0+] 0x2E || Result || [[#GetDebugFutureThreadInfo|GetDebugFutureThreadInfo]] || arch::LastThreadContext *out_context, uint64_t *thread_id, Handle debug_handle, int64_t ns | + | | [5.0.0-5.1.0] 0x2E || Result || GetFutureThreadInfo || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags, int64_t ns |
| + | |- |
| + | | [6.0.0+] 0x2E || Result || [[#GetDebugFutureThreadInfo|GetDebugFutureThreadInfo]] || arch::LastThreadContext *out_context, uint64_t *thread_id, Handle debug_handle, int64_t ns |
| |- | | |- |
| | 0x2F || Result || [[#GetLastThreadInfo|GetLastThreadInfo]] || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags | | | 0x2F || Result || [[#GetLastThreadInfo|GetLastThreadInfo]] || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags |
Line 112: |
Line 114: |
| |- | | |- |
| | [8.0.0+] 0x36 || void || [[#SynchronizePreemptionState|SynchronizePreemptionState]] || | | | [8.0.0+] 0x36 || void || [[#SynchronizePreemptionState|SynchronizePreemptionState]] || |
| + | |- |
| + | | [11.0.0+] 0x37 || Result || [[#GetResourceLimitPeakValue|GetResourceLimitPeakValue]] || int64_t *out_peak_value, Handle resource_limit_handle, LimitableResource which |
| + | |- style="border-top: double" |
| + | | [13.0.0+] 0x39 || Result || CreateIoPool || Handle *out_handle, IoPoolType which_pool |
| + | |- |
| + | | [13.0.0+] 0x3A || Result || CreateIoRegion || Handle *out_handle, Handle io_pool, PhysicalAddress physical_address, size_t size, MemoryMapping mapping, MemoryPermission perm |
| |- style="border-top: double" | | |- style="border-top: double" |
| | [1.0.0-3.0.2] 0x3C || void || [[#DumpInfo|DumpInfo]] || DumpInfoType dump_info_type, uint64_t arg | | | [1.0.0-3.0.2] 0x3C || void || [[#DumpInfo|DumpInfo]] || DumpInfoType dump_info_type, uint64_t arg |
Line 130: |
Line 138: |
| |- | | |- |
| | 0x45 || Result || [[#CreateEvent|CreateEvent]] || Handle *out_write_handle, Handle *out_read_handle | | | 0x45 || Result || [[#CreateEvent|CreateEvent]] || Handle *out_write_handle, Handle *out_read_handle |
− | |- style="border-top: double" | + | |- |
| + | | [13.0.0+] 0x46 || Result || MapIoRegion || Handle io_region, uintptr_t address, size_t size, MemoryPermission perm |
| + | |- |
| + | | [13.0.0+] 0x47 || Result || UnmapIoRegion || Handle io_region, uintptr_t address, size_t size |
| + | |- |
| | [5.0.0+] 0x48 || Result || [[#MapPhysicalMemoryUnsafe|MapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size | | | [5.0.0+] 0x48 || Result || [[#MapPhysicalMemoryUnsafe|MapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size |
| |- | | |- |
Line 157: |
Line 169: |
| | 0x54 || Result || [[#QueryPhysicalAddress|QueryPhysicalAddress]] || arch::PhysicalMemoryInfo *out_info, uintptr_t address | | | 0x54 || Result || [[#QueryPhysicalAddress|QueryPhysicalAddress]] || arch::PhysicalMemoryInfo *out_info, uintptr_t address |
| |- | | |- |
− | | 0x55 || Result || [[#QueryIoMapping|QueryIoMapping]] || uintptr_t *out_address, PhysicalAddress physical_address, size_t size | + | | [1.0.0-9.2.0] 0x55 || Result || [[#QueryIoMapping|QueryIoMapping]] || uintptr_t *out_address, PhysicalAddress physical_address, size_t size |
| + | |- |
| + | | [10.0.0+] 0x55 || Result || QueryMemoryMapping || uintptr_t *out_address, size_t *out_size, PhysicalAddress physical_address, size_t size |
| |- | | |- |
| | 0x56 || Result || [[#CreateDeviceAddressSpace|CreateDeviceAddressSpace]] || Handle *out_handle, uint64_t das_address, uint64_t das_size | | | 0x56 || Result || [[#CreateDeviceAddressSpace|CreateDeviceAddressSpace]] || Handle *out_handle, uint64_t das_address, uint64_t das_size |
Line 165: |
Line 179: |
| | 0x58 || Result || [[#DetachDeviceAddressSpace|DetachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle | | | 0x58 || Result || [[#DetachDeviceAddressSpace|DetachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle |
| |- | | |- |
− | | 0x59 || Result || [[#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm | + | | 0x59 || Result || [[#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option |
| |- | | |- |
− | | 0x5A || Result || [[#MapDeviceAddressSpaceAligned|MapDeviceAddressSpaceAligned]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm | + | | 0x5A || Result || [[#MapDeviceAddressSpaceAligned|MapDeviceAddressSpaceAligned]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option |
| |- | | |- |
− | | 0x5B || Result || [[#MapDeviceAddressSpace|MapDeviceAddressSpace]] || size_t *out_mapped_size, Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm | + | | [1.0.0-12.1.0] 0x5B || Result || [[#MapDeviceAddressSpace|MapDeviceAddressSpace]] || size_t *out_mapped_size, Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm |
| |- | | |- |
| | 0x5C || Result || [[#UnmapDeviceAddressSpace|UnmapDeviceAddressSpace]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address | | | 0x5C || Result || [[#UnmapDeviceAddressSpace|UnmapDeviceAddressSpace]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address |
Line 240: |
Line 254: |
| |- | | |- |
| | 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args | | | 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args |
| + | |- style="border-top: double" |
| + | | [15.0.0+] 0x90 || Result || MapInsecurePhysicalMemory || uintptr_t address, size_t size |
| + | |- |
| + | | [15.0.0+] 0x91 || Result || UnmapInsecurePhysicalMemory || uintptr_t address, size_t size |
| |- | | |- |
| |} | | |} |
Line 249: |
Line 267: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W1 || uint32_t || Size | + | | (In) X1 || uint64_t || Size |
| |- | | |- |
| | (Out) W0 || [[#Result]] || Result | | | (Out) W0 || [[#Result]] || Result |
Line 313: |
Line 331: |
| '''0xD801:''' Invalid permission specified. Valid permissions are ---, r-- and rw-. | | '''0xD801:''' Invalid permission specified. Valid permissions are ---, r-- and rw-. |
| | | |
− | '''0xD401:''' The provided memory region was in an invalid state. The region must have the PermissionChangeAllowed bit set in its [[#MemoryState]], and must not have the IsBorrowed or IsUncached [[#MemoryAttribute]]. | + | '''0xD401:''' The provided memory region was in an invalid state. The region must have the [[#MemoryState|FlagCanReprotect]] state, and must not have the [[#MemoryAttribute|Locked]] or [[#MemoryAttribute|Uncached]] attributes. |
| | | |
| '''0xCE01:''' Kernel resource exhausted. | | '''0xCE01:''' Kernel resource exhausted. |
Line 631: |
Line 649: |
| </div> | | </div> |
| | | |
− | Takes the given event out of the signaled state. | + | Takes the given event out of the signaled state, if it is signaled. |
| | | |
| === Result codes === | | === Result codes === |
Line 637: |
Line 655: |
| | | |
| '''0xE401:''' Invalid handle. The handle either does not exist, or is not a ReadableEvent nor a WritableEvent. | | '''0xE401:''' Invalid handle. The handle either does not exist, or is not a ReadableEvent nor a WritableEvent. |
− |
| |
− | '''0xFA01:''' The handle was not in a signaled state.
| |
| | | |
| == MapSharedMemory == | | == MapSharedMemory == |
Line 726: |
Line 742: |
| </div> | | </div> |
| | | |
− | Resets the signal on the given handle, ensuring future calls to [[#WaitSynchronization]] on this handle will sleep until the handle is signaled again. If the handle is a ReadableEvent, this is equivalent to calling ClearEvent() on the handle. | + | Resets the signal on the given handle, ensuring future calls to [[#WaitSynchronization]] on this handle will sleep until the handle is signaled again. If the handle is a ReadableEvent, this returns ResultInvalidState if the event is not signaled. |
| | | |
| If the handle is a Process, it will clear the signaled state (which is set when the process changes [[#ProcessState]]. Once the process enters the Exited state, calling ResetSignal on the process will no longer have an effect (the process is permanently signaled), and the syscall will return 0xFA01. | | If the handle is a Process, it will clear the signaled state (which is set when the process changes [[#ProcessState]]. Once the process enters the Exited state, calling ResetSignal on the process will no longer have an effect (the process is permanently signaled), and the syscall will return 0xFA01. |
Line 1,111: |
Line 1,127: |
| | | |
| Uses current process pool partition. | | Uses current process pool partition. |
| + | |
| + | === Result codes === |
| + | '''0x0:''' Success. |
| + | |
| + | '''0xCA01:''' Invalid size passed. It's either zero or not 4k-aligned |
| + | |
| + | '''0xCC01:''' Invalid address. (not 4k-aligned) |
| + | |
| + | '''0xDC01:''' Invalid memory range. It's either causes overflow, or does not fall into "reserved" address range (aka Alias). See AliasRegionAddress at [[#InfoType]] |
| + | |
| + | '''0xFA01:''' Invalid state. (not enough SystemResource (see [[NPDM#SystemResourceSize]])) |
| | | |
| == UnmapPhysicalMemory == | | == UnmapPhysicalMemory == |
Line 1,248: |
Line 1,275: |
| | (In) X3 || R3, R4 || uint64_t || Timeout | | | (In) X3 || R3, R4 || uint64_t || Timeout |
| |- | | |- |
− | | (Out) None || || || | + | | (Out) W0 || R0 || [[#Result]] || Result |
| |} | | |} |
| </div> | | </div> |
Line 1,266: |
Line 1,293: |
| | (In) W3 || R3 || uint32_t || NumToSignal | | | (In) W3 || R3 || uint32_t || NumToSignal |
| |- | | |- |
− | | (Out) None || || || | + | | (Out) W0 || R0 || [[#Result]] || Result |
| |} | | |} |
| </div> | | </div> |
Line 1,279: |
Line 1,306: |
| |- | | |- |
| | (Out) None || || | | | (Out) None || || |
| + | |} |
| + | </div> |
| + | |
| + | == GetResourceLimitPeakValue == |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument64 || Argument32 || Type || Name |
| + | |- |
| + | | (In) W1 || R1 || Handle<ResourceLimit> || ResourceLimitHandle |
| + | |- |
| + | | (In) W2 || R2 || [[#LimitableResource]] || LimitableResource |
| + | |- |
| + | | (Out) W0 || R0 || [[#Result]] || Result |
| + | |- |
| + | | (Out) X1 || R1, R2 || int64_t || PeakValue |
| |} | | |} |
| </div> | | </div> |
Line 1,387: |
Line 1,430: |
| ! Argument64 || Argument32 || Type || Name | | ! Argument64 || Argument32 || Type || Name |
| |- | | |- |
− | | (In) W1 || R1 || Handle<Port>* or Handle<ServerSession>* || Handles | + | | (In) X1 || R1 || Handle<Port>* or Handle<ServerSession>* || Handles |
| |- | | |- |
| | (In) W2 || R2 || uint32_t || NumHandles | | | (In) W2 || R2 || uint32_t || NumHandles |
Line 1,659: |
Line 1,702: |
| |} | | |} |
| </div> | | </div> |
− |
| |
− | The newly mapped pages will have [[#MemoryState]] type 0xE.
| |
| | | |
| You must pass same size and permissions as given in [[#CreateTransferMemory]], otherwise error. | | You must pass same size and permissions as given in [[#CreateTransferMemory]], otherwise error. |
Line 1,821: |
Line 1,862: |
| | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress | | | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress |
| |- | | |- |
− | | (In) W5 || R7 || [[#MemoryPermission]] || MemoryPermission | + | | (In) W5 || R7 || uint32_t || Option |
| |- | | |- |
| | (Out) W0 || R0 || [[#Result]] || Result | | | (Out) W0 || R0 || [[#Result]] || Result |
Line 1,831: |
Line 1,872: |
| Address is the userspace destination address, while DeviceAddressSpaceAddress is the source address between DeviceAddressSpaceStartAddress and DeviceAddressSpaceEndAddress (passed to [[#CreateDeviceAddressSpace]]). | | Address is the userspace destination address, while DeviceAddressSpaceAddress is the source address between DeviceAddressSpaceStartAddress and DeviceAddressSpaceEndAddress (passed to [[#CreateDeviceAddressSpace]]). |
| | | |
− | The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping. | + | The userspace destination address must have the [[SVC#MemoryState|FlagCanDeviceMap]] bit set. Bit [[SVC#MemoryAttribute|DeviceShared]] will be set after mapping. |
| + | |
| + | The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits. |
| | | |
| == MapDeviceAddressSpaceAligned == | | == MapDeviceAddressSpaceAligned == |
Line 1,849: |
Line 1,892: |
| | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress | | | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress |
| |- | | |- |
− | | (In) W5 || R7 || [[#MemoryPermission]] || MemoryPermission | + | | (In) W5 || R7 || uint32_t || Option |
| |- | | |- |
| | (Out) W0 || R0 || [[#Result]] || Result | | | (Out) W0 || R0 || [[#Result]] || Result |
Line 1,857: |
Line 1,900: |
| Maps an attached device address space to an userspace address. | | Maps an attached device address space to an userspace address. |
| | | |
− | Same as [[#MapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead. | + | Same as [[#MapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|FlagCanAlignedDeviceMap]] bit set instead. |
| + | |
| + | The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits. |
| | | |
| == MapDeviceAddressSpace == | | == MapDeviceAddressSpace == |
Line 2,562: |
Line 2,607: |
| ! Handle type || InfoType || InfoSubType || Description | | ! Handle type || InfoType || InfoSubType || Description |
| |- | | |- |
− | | Process || 0 || 0 || AllowedCpuIdBitmask | + | | Process || 0 || 0 || CoreMask |
| |- | | |- |
− | | Process || 1 || 0 || AllowedThreadPrioBitmask | + | | Process || 1 || 0 || PriorityMask |
| |- | | |- |
− | | Process || 2 || 0 || AliasRegionBaseAddr | + | | Process || 2 || 0 || AliasRegionAddress |
| |- | | |- |
| | Process || 3 || 0 || AliasRegionSize | | | Process || 3 || 0 || AliasRegionSize |
| |- | | |- |
− | | Process || 4 || 0 || HeapRegionBaseAddr | + | | Process || 4 || 0 || HeapRegionAddress |
| |- | | |- |
| | Process || 5 || 0 || HeapRegionSize | | | Process || 5 || 0 || HeapRegionSize |
| |- | | |- |
− | | Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used). | + | | Process || 6 || 0 || TotalMemorySize. Total memory available(free+used). |
| |- | | |- |
− | | Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap. | + | | Process || 7 || 0 || UsedMemorySize. Total used size of codebin memory + main-thread stack + allocated heap. |
| |- | | |- |
− | | Zero || 8 || 0 || IsCurrentProcessBeingDebugged | + | | Zero || 8 || 0 || DebuggerAttached |
| |- | | |- |
− | | Zero || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]]. | + | | Zero || 9 || 0 || ResourceLimit |
| |- | | |- |
| | Zero || 10 || -1, {current coreid} || IdleTickCount | | | Zero || 10 || -1, {current coreid} || IdleTickCount |
| |- | | |- |
− | | Zero || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs. | + | | Zero || 11 || 0-3 || RandomEntropy. Used to seed usermode PRNGs. |
| |- | | |- |
− | | Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr | + | | Process || 12 || 0 || [2.0.0+] AslrRegionAddress |
| |- | | |- |
− | | Process || 13 || 0 || [2.0.0+] AddressSpaceSize | + | | Process || 13 || 0 || [2.0.0+] AslrRegionSize |
| |- | | |- |
− | | Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr | + | | Process || 14 || 0 || [2.0.0+] StackRegionAddress |
| |- | | |- |
| | Process || 15 || 0 || [2.0.0+] StackRegionSize | | | Process || 15 || 0 || [2.0.0+] StackRegionSize |
| |- | | |- |
− | | Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize | + | | Process || 16 || 0 || [3.0.0+] SystemResourceSizeTotal |
| |- | | |- |
− | | Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage | + | | Process || 17 || 0 || [3.0.0+] SystemResourceSizeUsed |
| |- | | |- |
| | Process || 18 || 0 || [3.0.0+] ProgramId | | | Process || 18 || 0 || [3.0.0+] ProgramId |
| |- | | |- |
− | | Zero || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound | + | | Zero || 19 || 0 || [4.0.0-4.1.0] InitialProcessIdRange_LowerBound |
| |- | | |- |
− | | Zero || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound | + | | Zero || 19 || 1 || [4.0.0-4.1.0] InitialProcessIdRange_UpperBound |
| |- | | |- |
− | | Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr | + | | Process || 20 || 0 || [5.0.0+] UserExceptionContextAddress |
| |- | | |- |
− | | Process || 21 || 0 || [6.0.0+] TotalMemoryAvailableWithoutMmHeap | + | | Process || 21 || 0 || [6.0.0+] TotalNonSystemMemorySize |
| |- | | |- |
− | | Process || 22 || 0 || [6.0.0+] TotalMemoryUsedWithoutMmHeap | + | | Process || 22 || 0 || [6.0.0+] UsedNonSystemMemorySize |
| |- | | |- |
| | Process || 23 || 0 || [9.0.0+] IsApplication | | | Process || 23 || 0 || [9.0.0+] IsApplication |
| |- | | |- |
− | | Thread || 0xF0000002 || 0-3, -1 || Thread Ticks. When 0-3 are passed, gets specific core CPU ticks spent on thread. When -1 is passed, gets total CPU ticks spent on thread. | + | | Process || 24 || 0 || [11.0.0+] FreeThreadCount |
| + | |- |
| + | | Thread || 25 ([1.0.0-12.1.0] 0xF0000002) || 0-3, -1 || ThreadTickCount. When 0-3 are passed, gets specific core CPU ticks spent on thread. When -1 is passed, gets total CPU ticks spent on thread. |
| + | |- |
| + | | Process || 26 || 0 || [14.0.0+] IsSvcPermitted |
| + | |- |
| + | | Process || 27 || 0 || [16.0.0+] IoRegionHint |
| + | |- |
| + | | Process || 28 || 0 || [18.0.0+] AliasRegionExtraSize |
| |} | | |} |
| | | |
| == SystemInfoType == | | == SystemInfoType == |
| {| class=wikitable | | {| class=wikitable |
− | ! Handle type || SystemInfoType || SystemInfoSubType|| Description | + | ! Handle type || SystemInfoType || SystemInfoSubType || Description |
| |- | | |- |
− | | Zero || 0 || 0 || TotalMemorySize_Application | + | | Zero || 0 || 0 || TotalPhysicalMemorySize_Application |
| |- | | |- |
− | | Zero || 0 || 1 || TotalMemorySize_Applet | + | | Zero || 0 || 1 || TotalPhysicalMemorySize_Applet |
| |- | | |- |
− | | Zero || 0 || 2 || TotalMemorySize_System | + | | Zero || 0 || 2 || TotalPhysicalMemorySize_System |
| |- | | |- |
− | | Zero || 0 || 3 || TotalMemorySize_SystemUnsafe | + | | Zero || 0 || 3 || TotalPhysicalMemorySize_SystemUnsafe |
| |- | | |- |
− | | Zero || 1 || 0 || CurrentMemorySize_Application | + | | Zero || 1 || 0 || UsedPhysicalMemorySize_Application |
| |- | | |- |
− | | Zero || 1 || 1 || CurrentMemorySize_Applet | + | | Zero || 1 || 1 || UsedPhysicalMemorySize_Applet |
| |- | | |- |
− | | Zero || 1 || 2 || CurrentMemorySize_System | + | | Zero || 1 || 2 || UsedPhysicalMemorySize_System |
| |- | | |- |
− | | Zero || 1 || 3 || CurrentMemorySize_SystemUnsafe | + | | Zero || 1 || 3 || UsedPhysicalMemorySize_SystemUnsafe |
| |- | | |- |
− | | Zero || 2 || 0 || PrivilegedProcessId_LowerBound | + | | Zero || 2 || 0 || InitialProcessIdRange_LowerBound |
| |- | | |- |
− | | Zero || 2 || 1 || PrivilegedProcessId_UpperBound | + | | Zero || 2 || 1 || InitialProcessIdRange_UpperBound |
| |} | | |} |
| | | |
Line 2,931: |
Line 2,984: |
| |- | | |- |
| | 2 || Execute || Can be set by [[#SetProcessMemoryPermission]] and [[#ControlCodeMemory]]. | | | 2 || Execute || Can be set by [[#SetProcessMemoryPermission]] and [[#ControlCodeMemory]]. |
| + | |- |
| + | | 28 || DontCare || |
| |} | | |} |
| | | |
Line 2,952: |
Line 3,007: |
| | 7-0 || [[#MemoryType]] || | | | 7-0 || [[#MemoryType]] || |
| |- | | |- |
− | | 8 || [[#SetMemoryPermission|PermissionChangeAllowed]] || | + | | 8 || [[#SetMemoryPermission|FlagCanReprotect]] || |
| |- | | |- |
− | | 9 || ForceReadWritableByDebugSyscalls || Allows using [[#WriteDebugProcessMemory]] on segments mapped read-only. | + | | 9 || FlagCanDebug || Allows using [[#WriteDebugProcessMemory]] on segments mapped read-only. |
| |- | | |- |
− | | 10 || IpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=0. | + | | 10 || FlagCanUseIpc || Allows sending this region as an IPC A/B/W buffer with flags=0. |
| |- | | |- |
− | | 11 || NonDeviceIpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=1. | + | | 11 || FlagCanUseNonDeviceIpc || Allows sending this region as an IPC A/B/W buffer with flags=1. |
| |- | | |- |
− | | 12 || NonSecureIpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=3. | + | | 12 || FlagCanUseNonSecureIpc || Allows sending this region as an IPC A/B/W buffer with flags=3. |
| |- | | |- |
− | | 14 || [[#SetProcessMemoryPermission|ProcessPermissionChangeAllowed]] || | + | | 13 || FlagMapped || |
| |- | | |- |
− | | 15 || [[#MapMemory|MapAllowed]] || | + | | 14 || [[#SetProcessMemoryPermission|FlagCode]] || |
| |- | | |- |
− | | 16 || [[#UnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]] || | + | | 15 || [[#MapMemory|FlagCanAlias]] || |
| |- | | |- |
− | | 17 || [[#CreateTransferMemory|TransferMemoryAllowed]] || | + | | 16 || [[#MapProcessCodeMemory|FlagCanCodeAlias]] || |
| |- | | |- |
− | | 18 || [[#QueryPhysicalAddress|QueryPhysicalAddressAllowed]] || | + | | 17 || [[#CreateTransferMemory|FlagCanTransfer]] || |
| |- | | |- |
− | | 19 || MapDeviceAllowed ([[#MapDeviceAddressSpace]] and [[#MapDeviceAddressSpaceByForce]]) || | + | | 18 || [[#QueryPhysicalAddress|FlagCanQueryPhysical]] || |
| |- | | |- |
− | | 20 || [[#MapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]] || | + | | 19 || [[#MapDeviceAddressSpace|FlagCanDeviceMap]] || |
| |- | | |- |
− | | 21 || [[#SendSyncRequestWithUserBuffer|IpcBufferAllowed]] || | + | | 20 || [[#MapDeviceAddressSpaceAligned|FlagCanAlignedDeviceMap]] || |
| |- | | |- |
− | | 22 || IsPoolAllocated/IsReferenceCounted || The physical memory blocks backing this region are refcounted. | + | | 21 || [[#SendSyncRequestWithUserBuffer|FlagCanIpcUserBuffer]] || |
| |- | | |- |
− | | 23 || [[#MapProcessMemory|MapProcessAllowed]] || | + | | 22 || FlagReferenceCounted || The physical memory blocks backing this region are refcounted. |
| |- | | |- |
− | | 24 || [[#SetMemoryAttribute|AttributeChangeAllowed]] || | + | | 23 || [[#MapProcessMemory|FlagCanMapProcess]] || |
| |- | | |- |
− | | 25 || [4.0.0+] [[#CreateCodeMemory|CodeMemoryAllowed]] || | + | | 24 || [[#SetMemoryAttribute|FlagCanChangeAttribute]] || |
| + | |- |
| + | | 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] || |
| + | |- |
| + | | 26 || [15.0.0+] FlagLinearMapped || |
| |} | | |} |
| | | |
Line 3,039: |
Line 3,098: |
| | 0x015C3C0D || Transfered || Mapped using [[#MapTransferMemory]] when the owning process has perm=0. | | | 0x015C3C0D || Transfered || Mapped using [[#MapTransferMemory]] when the owning process has perm=0. |
| |- | | |- |
− | | 0x005C380E || ShTransfered || Mapped using [[#MapTransferMemory]] when the owning process has perm!=0. | + | | 0x005C380E || SharedTransfered || Mapped using [[#MapTransferMemory]] when the owning process has perm!=0. |
| |- | | |- |
| | 0x0040380F || SharedCode || Mapped using [[#MapProcessMemory]]. | | | 0x0040380F || SharedCode || Mapped using [[#MapProcessMemory]]. |
| |- | | |- |
− | | 0x00000010 || Reserved || | + | | 0x00000010 || Inaccessible || |
| |- | | |- |
| | 0x005C3811 || [[IPC_Marshalling|NonSecureIpc]] || IPC buffers with descriptor flags=1. | | | 0x005C3811 || [[IPC_Marshalling|NonSecureIpc]] || IPC buffers with descriptor flags=1. |
Line 3,049: |
Line 3,108: |
| | 0x004C2812 || [[IPC_Marshalling|NonDeviceIpc]] || IPC buffers with descriptor flags=3. | | | 0x004C2812 || [[IPC_Marshalling|NonDeviceIpc]] || IPC buffers with descriptor flags=3. |
| |- | | |- |
− | | 0x00002013 || KernelStack || Mapped in kernel during [[#CreateThread]]. | + | | 0x00002013 || Kernel || Mapped in kernel during [[#CreateThread]]. |
| + | |- |
| + | | 0x00402214 || [4.0.0+] GeneratedCode || Mapped in kernel during [[#ControlCodeMemory]]. |
| + | |- |
| + | | 0x00402015 || [4.0.0+] CodeOut || Mapped in kernel during [[#ControlCodeMemory]]. |
| |- | | |- |
− | | 0x00402214 || [4.0.0+] CodeReadOnly || Mapped in kernel during [[#ControlCodeMemory]]. | + | | 0x00002016 || [13.0.0+] Coverage || |
| |- | | |- |
− | | 0x00402015 || [4.0.0+] CodeWritable || Mapped in kernel during [[#ControlCodeMemory]]. | + | | 0x05583817 || [15.0.0+] Insecure || |
| |} | | |} |
| | | |