Line 3: |
Line 3: |
| = System calls = | | = System calls = |
| {| class=wikitable | | {| class=wikitable |
− | ! Id || Name | + | ! ID || Return Type || Name || Arguments |
| |- | | |- |
− | | 0x1 || [[#SetHeapSize]] | + | | 0x01 || Result || [[#SetHeapSize|SetHeapSize]] || uintptr_t *out_address, size_t size |
| |- | | |- |
− | | 0x2 || [[#SetMemoryPermission]] | + | | 0x02 || Result || [[#SetMemoryPermission|SetMemoryPermission]] || uintptr_t address, size_t size, MemoryPermission perm |
| |- | | |- |
− | | 0x3 || [[#SetMemoryAttribute]] | + | | 0x03 || Result || [[#SetMemoryAttribute|SetMemoryAttribute]] || uintptr_t address, size_t size, uint32_t mask, uint32_t attr |
| |- | | |- |
− | | 0x4 || [[#MapMemory]] | + | | 0x04 || Result || [[#MapMemory|MapMemory]] || uintptr_t dst_address, uintptr_t src_address, size_t size |
| |- | | |- |
− | | 0x5 || [[#UnmapMemory]] | + | | 0x05 || Result || [[#UnmapMemory|UnmapMemory]] || uintptr_t dst_address, uintptr_t src_address, size_t size |
| |- | | |- |
− | | 0x6 || [[#QueryMemory]] | + | | 0x06 || Result || [[#QueryMemory|QueryMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, uintptr_t address |
| |- | | |- |
− | | 0x7 || [[#ExitProcess]] | + | | 0x07 || void || [[#ExitProcess|ExitProcess]] || |
| |- | | |- |
− | | 0x8 || [[#CreateThread]] | + | | 0x08 || Result || [[#CreateThread|CreateThread]] || Handle *out_handle, ThreadFunc func, uintptr_t arg, uintptr_t stack_bottom, int32_t priority, int32_t core_id |
| |- | | |- |
− | | 0x9 || [[#StartThread]] | + | | 0x09 || Result || [[#StartThread|StartThread]] || Handle thread_handle |
| |- | | |- |
− | | 0xA || [[#ExitThread]] | + | | 0x0A || void || [[#ExitThread|ExitThread]] || |
| |- | | |- |
− | | 0xB || [[#SleepThread]] | + | | 0x0B || void || [[#SleepThread|SleepThread]] || int64_t ns |
| |- | | |- |
− | | 0xC || [[#GetThreadPriority]] | + | | 0x0C || Result || [[#GetThreadPriority|GetThreadPriority]] || int32_t *out_priority, Handle thread_handle |
| |- | | |- |
− | | 0xD || [[#SetThreadPriority]] | + | | 0x0D || Result || [[#SetThreadPriority|SetThreadPriority]] || Handle thread_handle, int32_t priority |
| |- | | |- |
− | | 0xE || [[#GetThreadCoreMask]] | + | | 0x0E || Result || [[#GetThreadCoreMask|GetThreadCoreMask]] || int32_t *out_core_id, uint64_t *out_affinity_mask, Handle thread_handle |
| |- | | |- |
− | | 0xF || [[#SetThreadCoreMask]] | + | | 0x0F || Result || [[#SetThreadCoreMask|SetThreadCoreMask]] || Handle thread_handle, int32_t core_id, uint64_t affinity_mask |
| |- | | |- |
− | | 0x10 || [[#GetCurrentProcessorNumber]] | + | | 0x10 || int32_t || [[#GetCurrentProcessorNumber|GetCurrentProcessorNumber]] || |
| |- | | |- |
− | | 0x11 || [[#SignalEvent]] | + | | 0x11 || Result || [[#SignalEvent|SignalEvent]] || Handle event_handle |
| |- | | |- |
− | | 0x12 || [[#ClearEvent]] | + | | 0x12 || Result || [[#ClearEvent|ClearEvent]] || Handle event_handle |
| |- | | |- |
− | | 0x13 || [[#MapSharedMemory]] | + | | 0x13 || Result || [[#MapSharedMemory|MapSharedMemory]] || Handle shmem_handle, uintptr_t address, size_t size, MemoryPermission map_perm |
| |- | | |- |
− | | 0x14 || [[#UnmapSharedMemory]] | + | | 0x14 || Result || [[#UnmapSharedMemory|UnmapSharedMemory]] || Handle shmem_handle, uintptr_t address, size_t size |
| |- | | |- |
− | | 0x15 || [[#CreateTransferMemory]] | + | | 0x15 || Result || [[#CreateTransferMemory|CreateTransferMemory]] || Handle *out_handle, uintptr_t address, size_t size, MemoryPermission map_perm |
| |- | | |- |
− | | 0x16 || [[#CloseHandle]] | + | | 0x16 || Result || [[#CloseHandle|CloseHandle]] || Handle handle |
| |- | | |- |
− | | 0x17 || [[#ResetSignal]] | + | | 0x17 || Result || [[#ResetSignal|ResetSignal]] || Handle handle |
| |- | | |- |
− | | 0x18 || [[#WaitSynchronization]] | + | | 0x18 || Result || [[#WaitSynchronization|WaitSynchronization]] || int32_t *out_index, const Handle *handles, int32_t numHandles, int64_t timeout_ns |
| |- | | |- |
− | | 0x19 || [[#CancelSynchronization]] | + | | 0x19 || Result || [[#CancelSynchronization|CancelSynchronization]] || Handle handle |
| |- | | |- |
− | | 0x1A || [[#ArbitrateLock]] | + | | 0x1A || Result || [[#ArbitrateLock|ArbitrateLock]] || Handle thread_handle, uintptr_t address, uint32_t tag |
| |- | | |- |
− | | 0x1B || [[#ArbitrateUnlock]] | + | | 0x1B || Result || [[#ArbitrateUnlock|ArbitrateUnlock]] || uintptr_t address |
| |- | | |- |
− | | 0x1C || [[#WaitProcessWideKeyAtomic]] | + | | 0x1C || Result || [[#WaitProcessWideKeyAtomic|WaitProcessWideKeyAtomic]] || uintptr_t address, uintptr_t cv_key, uint32_t tag, int64_t timeout_ns |
| |- | | |- |
− | | 0x1D || [[#SignalProcessWideKey]] | + | | 0x1D || void || [[#SignalProcessWideKey|SignalProcessWideKey]] || uintptr_t cv_key, int32_t count |
| |- | | |- |
− | | 0x1E || [[#GetSystemTick]] | + | | 0x1E || int64_t || [[#GetSystemTick|GetSystemTick]] || |
| |- | | |- |
− | | 0x1F || [[#ConnectToNamedPort]] | + | | 0x1F || Result || [[#ConnectToNamedPort|ConnectToNamedPort]] || Handle *out_handle, const char *name |
| |- | | |- |
− | | 0x20 || [[#SendSyncRequestLight]] | + | | 0x20 || Result || [[#SendSyncRequestLight|SendSyncRequestLight]] || Handle session_handle |
| |- | | |- |
− | | 0x21 || [[#SendSyncRequest]] | + | | 0x21 || Result || [[#SendSyncRequest|SendSyncRequest]] || Handle session_handle |
| |- | | |- |
− | | 0x22 || [[#SendSyncRequestWithUserBuffer]] | + | | 0x22 || Result || [[#SendSyncRequestWithUserBuffer|SendSyncRequestWithUserBuffer]] || uintptr_t message_buffer, size_t message_buffer_size, Handle session_handle |
| |- | | |- |
− | | 0x23 || [[#SendAsyncRequestWithUserBuffer]] | + | | 0x23 || Result || [[#SendAsyncRequestWithUserBuffer|SendAsyncRequestWithUserBuffer]] || Handle *out_event_handle, uintptr_t message_buffer, size_t message_buffer_size, Handle session_handle |
| |- | | |- |
− | | 0x24 || [[#GetProcessId]] | + | | 0x24 || Result || [[#GetProcessId|GetProcessId]] || uint64_t *out_process_id, Handle process_handle |
| |- | | |- |
− | | 0x25 || [[#GetThreadId]] | + | | 0x25 || Result || [[#GetThreadId|GetThreadId]] || uint64_t *out_thread_id, Handle thread_handle |
| |- | | |- |
− | | 0x26 || [[#Break]] | + | | 0x26 || void || [[#Break|Break]] || BreakReason break_reason, uintptr_t arg, size_t size |
| |- | | |- |
− | | 0x27 || [[#OutputDebugString]] | + | | 0x27 || Result || [[#OutputDebugString|OutputDebugString]] || const char *debug_str, size_t len |
| |- | | |- |
− | | 0x28 || [[#ReturnFromException]] | + | | 0x28 || void || [[#ReturnFromException|ReturnFromException]] || Result result |
| |- | | |- |
− | | 0x29 || [[#GetInfo]] | + | | 0x29 || Result || [[#GetInfo|GetInfo]] || uint64_t *out, InfoType info_type, Handle handle, uint64_t info_subtype |
| |- | | |- |
− | | 0x2A || [[#FlushEntireDataCache]] | + | | 0x2A || void || [[#FlushEntireDataCache|FlushEntireDataCache]] || |
| |- | | |- |
− | | 0x2B || [[#FlushDataCache]] | + | | 0x2B || Result || [[#FlushDataCache|FlushDataCache]] || uintptr_t address, size_t size |
| |- | | |- |
− | | 0x2C || [3.0.0+] [[#MapPhysicalMemory]]
| + | | [3.0.0+] 0x2C || Result || [[#MapPhysicalMemory|MapPhysicalMemory]] || uintptr_t address, size_t size |
| |- | | |- |
− | | 0x2D || [3.0.0+] [[#UnmapPhysicalMemory]]
| + | | [3.0.0+] 0x2D || Result || [[#UnmapPhysicalMemory|UnmapPhysicalMemory]] || uintptr_t address, size_t size |
| |- | | |- |
− | | 0x2E || [5.0.0+] [[#GetFutureThreadInfo]]
| + | | [5.0.0+] 0x2E || Result || [[#GetDebugFutureThreadInfo|GetDebugFutureThreadInfo]] || arch::LastThreadContext *out_context, uint64_t *thread_id, Handle debug_handle, int64_t ns |
| |- | | |- |
− | | 0x2F || [[#GetLastThreadInfo]] | + | | 0x2F || Result || [[#GetLastThreadInfo|GetLastThreadInfo]] || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags |
| |- | | |- |
− | | 0x30 || [[#GetResourceLimitLimitValue]] | + | | 0x30 || Result || [[#GetResourceLimitLimitValue|GetResourceLimitLimitValue]] || int64_t *out_limit_value, Handle resource_limit_handle, LimitableResource which |
| |- | | |- |
− | | 0x31 || [[#GetResourceLimitCurrentValue]] | + | | 0x31 || Result || [[#GetResourceLimitCurrentValue|GetResourceLimitCurrentValue]] || int64_t *out_current_value, Handle resource_limit_handle, LimitableResource which |
| |- | | |- |
− | | 0x32 || [[#SetThreadActivity]] | + | | 0x32 || Result || [[#SetThreadActivity|SetThreadActivity]] || Handle thread_handle, ThreadActivity thread_activity |
| |- | | |- |
− | | 0x33 || [[#GetThreadContext3]] | + | | 0x33 || Result || [[#GetThreadContext3|GetThreadContext3]] || ThreadContext *out_context, Handle thread_handle |
| |- | | |- |
− | | 0x34 || [4.0.0+] [[#WaitForAddress]]
| + | | [4.0.0+] 0x34 || Result || [[#WaitForAddress|WaitForAddress]] || uintptr_t address, ArbitrationType arb_type, int32_t value, int64_t timeout_ns |
| |- | | |- |
− | | 0x35 || [4.0.0+] [[#SignalToAddress]]
| + | | [4.0.0+] 0x35 || Result || [[#SignalToAddress|SignalToAddress]] || uintptr_t address, SignalType signal_type, int32_t value, int32_t count |
| |- | | |- |
− | | 0x36 || [8.0.0+] [[#SynchronizePreemptionState]]
| + | | [8.0.0+] 0x36 || void || [[#SynchronizePreemptionState|SynchronizePreemptionState]] || |
| |- style="border-top: double" | | |- style="border-top: double" |
− | | 0x3C || [4.0.0+] [[#KernelDebug]] ([1.0.0-3.0.2] [[#DumpInfo]]) | + | | [1.0.0-3.0.2] 0x3C || void || [[#DumpInfo|DumpInfo]] || DumpInfoType dump_info_type, uint64_t arg |
| |- | | |- |
− | | 0x3D || [4.0.0+] [[#ChangeKernelTraceState]] | + | | [4.0.0+] 0x3C || void || [[#KernelDebug|KernelDebug]] || KernelDebugType kern_debug_type, uint64_t arg0, uint64_t arg1, uint64_t arg2 |
| + | |- |
| + | | [4.0.0+] 0x3D || void || [[#ChangeKernelTraceState|ChangeKernelTraceState]] || KernelTraceState kern_trace_state |
| |- style="border-top: double" | | |- style="border-top: double" |
− | | 0x40 || [[#CreateSession]] | + | | 0x40 || Result || [[#CreateSession|CreateSession]] || Handle *out_server_session_handle, Handle *out_client_session_handle, bool is_light, uintptr_t name |
| |- | | |- |
− | | 0x41 || [[#AcceptSession]] | + | | 0x41 || Result || [[#AcceptSession|AcceptSession]] || Handle *out_handle, Handle port |
| |- | | |- |
− | | 0x42 || [[#ReplyAndReceiveLight]] | + | | 0x42 || Result || [[#ReplyAndReceiveLight|ReplyAndReceiveLight]] || Handle handle |
| |- | | |- |
− | | 0x43 || [[#ReplyAndReceive]] | + | | 0x43 || Result || [[#ReplyAndReceive|ReplyAndReceive]] || int32_t *out_index, const Handle *handles, int32_t num_handles, Handle reply_target, int64_t timeout_ns |
| |- | | |- |
− | | 0x44 || [[#ReplyAndReceiveWithUserBuffer]] | + | | 0x44 || Result || [[#ReplyAndReceiveWithUserBuffer|ReplyAndReceiveWithUserBuffer]] || int32_t *out_index, uintptr_t message_buffer, size_t message_buffer_size, const Handle *handles, int32_t num_handles, Handle reply_target, int64_t timeout_ns |
| |- | | |- |
− | | 0x45 || [[#CreateEvent]] | + | | 0x45 || Result || [[#CreateEvent|CreateEvent]] || Handle *out_write_handle, Handle *out_read_handle |
| |- style="border-top: double" | | |- style="border-top: double" |
− | | 0x48 || [5.0.0+] [[#MapPhysicalMemoryUnsafe]]
| + | | [5.0.0+] 0x48 || Result || [[#MapPhysicalMemoryUnsafe|MapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size |
| |- | | |- |
− | | 0x49 || [5.0.0+] [[#UnmapPhysicalMemoryUnsafe]]
| + | | [5.0.0+] 0x49 || Result || [[#UnmapPhysicalMemoryUnsafe|UnmapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size |
| |- | | |- |
− | | 0x4A || [5.0.0+] [[#SetUnsafeLimit]]
| + | | [5.0.0+] 0x4A || Result || [[#SetUnsafeLimit|SetUnsafeLimit]] || size_t limit |
| |- | | |- |
− | | 0x4B || [4.0.0+] [[#CreateCodeMemory]]
| + | | [4.0.0+] 0x4B || Result || [[#CreateCodeMemory|CreateCodeMemory]] || Handle *out_handle, uintptr_t address, size_t size |
| |- | | |- |
− | | 0x4C || [4.0.0+] [[#ControlCodeMemory]]
| + | | [4.0.0+] 0x4C || Result || [[#ControlCodeMemory|ControlCodeMemory]] || Handle code_memory_handle, CodeMemoryOperation operation, uint64_t address, uint64_t size, MemoryPermission perm |
| |- | | |- |
− | | 0x4D || [[#SleepSystem]] | + | | 0x4D || void || [[#SleepSystem|SleepSystem]] || |
| |- | | |- |
− | | 0x4E || [[#ReadWriteRegister]] | + | | 0x4E || Result || [[#ReadWriteRegister|ReadWriteRegister]] || uint32_t *out_value, PhysicalAddress address, uint32_t mask, uint32_t value |
| |- | | |- |
− | | 0x4F || [[#SetProcessActivity]] | + | | 0x4F || Result || [[#SetProcessActivity|SetProcessActivity]] || Handle process_handle, ProcessActivity process_activity |
| |- | | |- |
− | | 0x50 || [[#CreateSharedMemory]] | + | | 0x50 || Result || [[#CreateSharedMemory|CreateSharedMemory]] || Handle *out_handle, size_t size, MemoryPermission owner_perm, MemoryPermission remote_perm |
| |- | | |- |
− | | 0x51 || [[#MapTransferMemory]] | + | | 0x51 || Result || [[#MapTransferMemory|MapTransferMemory]] || Handle trmem_handle, uintptr_t address, size_t size, MemoryPermission owner_perm |
| |- | | |- |
− | | 0x52 || [[#UnmapTransferMemory]] | + | | 0x52 || Result || [[#UnmapTransferMemory|UnmapTransferMemory]] || Handle trmem_handle, uintptr_t address, size_t size |
| |- | | |- |
− | | 0x53 || [[#CreateInterruptEvent]] | + | | 0x53 || Result || [[#CreateInterruptEvent|CreateInterruptEvent]] || Handle *out_read_handle, int32_t interrupt_id, InterruptType interrupt_type |
| |- | | |- |
− | | 0x54 || [[#QueryPhysicalAddress]] | + | | 0x54 || Result || [[#QueryPhysicalAddress|QueryPhysicalAddress]] || arch::PhysicalMemoryInfo *out_info, uintptr_t address |
| |- | | |- |
− | | 0x55 || [[#QueryIoMapping]] | + | | 0x55 || Result || [[#QueryIoMapping|QueryIoMapping]] || uintptr_t *out_address, PhysicalAddress physical_address, size_t size |
| |- | | |- |
− | | 0x56 || [[#CreateDeviceAddressSpace]] | + | | 0x56 || Result || [[#CreateDeviceAddressSpace|CreateDeviceAddressSpace]] || Handle *out_handle, uint64_t das_address, uint64_t das_size |
| |- | | |- |
− | | 0x57 || [[#AttachDeviceAddressSpace]] | + | | 0x57 || Result || [[#AttachDeviceAddressSpace|AttachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle |
| |- | | |- |
− | | 0x58 || [[#DetachDeviceAddressSpace]] | + | | 0x58 || Result || [[#DetachDeviceAddressSpace|DetachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle |
| |- | | |- |
− | | 0x59 || [[#MapDeviceAddressSpaceByForce]] | + | | 0x59 || Result || [[#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm |
| |- | | |- |
− | | 0x5A || [[#MapDeviceAddressSpaceAligned]] | + | | 0x5A || Result || [[#MapDeviceAddressSpaceAligned|MapDeviceAddressSpaceAligned]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm |
| |- | | |- |
− | | 0x5B || [[#MapDeviceAddressSpace]] | + | | 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 || [[#UnmapDeviceAddressSpace]] | + | | 0x5C || Result || [[#UnmapDeviceAddressSpace|UnmapDeviceAddressSpace]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address |
| |- | | |- |
− | | 0x5D || [[#InvalidateProcessDataCache]] | + | | 0x5D || Result || [[#InvalidateProcessDataCache|InvalidateProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size |
| |- | | |- |
− | | 0x5E || [[#StoreProcessDataCache]] | + | | 0x5E || Result || [[#StoreProcessDataCache|StoreProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size |
| |- | | |- |
− | | 0x5F || [[#FlushProcessDataCache]] | + | | 0x5F || Result || [[#FlushProcessDataCache|FlushProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size |
| |- | | |- |
− | | 0x60 || [[#DebugActiveProcess]] | + | | 0x60 || Result || [[#DebugActiveProcess|DebugActiveProcess]] || Handle *out_handle, uint64_t process_id |
| |- | | |- |
− | | 0x61 || [[#BreakDebugProcess]] | + | | 0x61 || Result || [[#BreakDebugProcess|BreakDebugProcess]] || Handle debug_handle |
| |- | | |- |
− | | 0x62 || [[#TerminateDebugProcess]] | + | | 0x62 || Result || [[#TerminateDebugProcess|TerminateDebugProcess]] || Handle debug_handle |
| |- | | |- |
− | | 0x63 || [[#GetDebugEvent]] | + | | 0x63 || Result || [[#GetDebugEvent|GetDebugEvent]] || arch::DebugEventInfo *out_info, Handle debug_handle |
| |- | | |- |
− | | 0x64 || [[#ContinueDebugEvent]] | + | | 0x64 || Result || [[#ContinueDebugEvent|ContinueDebugEvent]] || Handle debug_handle, uint32_t flags, const uint64_t *thread_ids, int32_t num_thread_ids |
| |- | | |- |
− | | 0x65 || [[#GetProcessList]] | + | | 0x65 || Result || [[#GetProcessList|GetProcessList]] || int32_t *out_num_processes, uint64_t *out_process_ids, int32_t max_out_count |
| |- | | |- |
− | | 0x66 || [[#GetThreadList]] | + | | 0x66 || Result || [[#GetThreadList|GetThreadList]] || int32_t *out_num_threads, uint64_t *out_thread_ids, int32_t max_out_count, Handle debug_handle |
| |- | | |- |
− | | 0x67 || [[#GetDebugThreadContext]] | + | | 0x67 || Result || [[#GetDebugThreadContext|GetDebugThreadContext]] || ThreadContext *out_context, Handle debug_handle, uint64_t thread_id, uint32_t context_flags |
| |- | | |- |
− | | 0x68 || [[#SetDebugThreadContext]] | + | | 0x68 || Result || [[#SetDebugThreadContext|SetDebugThreadContext]] || Handle debug_handle, uint64_t thread_id, const ThreadContext *context, uint32_t context_flags |
| |- | | |- |
− | | 0x69 || [[#QueryDebugProcessMemory]] | + | | 0x69 || Result || [[#QueryDebugProcessMemory|QueryDebugProcessMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, Handle process_handle, uintptr_t address |
| |- | | |- |
− | | 0x6A || [[#ReadDebugProcessMemory]] | + | | 0x6A || Result || [[#ReadDebugProcessMemory|ReadDebugProcessMemory]] || uintptr_t buffer, Handle debug_handle, uintptr_t address, size_t size |
| |- | | |- |
− | | 0x6B || [[#WriteDebugProcessMemory]] | + | | 0x6B || Result || [[#WriteDebugProcessMemory|WriteDebugProcessMemory]] || Handle debug_handle, uintptr_t buffer, uintptr_t address, size_t size |
| |- | | |- |
− | | 0x6C || [[#SetHardwareBreakPoint]] | + | | 0x6C || Result || [[#SetHardwareBreakPoint|SetHardwareBreakPoint]] || HardwareBreakPointRegisterName name, uint64_t flags, uint64_t value |
| |- | | |- |
− | | 0x6D || [[#GetDebugThreadParam]] | + | | 0x6D || Result || [[#GetDebugThreadParam|GetDebugThreadParam]] || uint64_t *out_64, uint32_t *out_32, Handle debug_handle, uint64_t thread_id, DebugThreadParam param |
| |- style="border-top: double" | | |- style="border-top: double" |
− | | 0x6F || [5.0.0+] [[#GetSystemInfo]]
| + | | [5.0.0+] 0x6F || Result || [[#GetSystemInfo|GetSystemInfo]] || uint64_t *out, SystemInfoType info_type, Handle handle, uint64_t info_subtype |
| |- | | |- |
− | | 0x70 || [[#CreatePort]] | + | | 0x70 || Result || [[#CreatePort|CreatePort]] || Handle *out_server_handle, Handle *out_client_handle, int32_t max_sessions, bool is_light, uintptr_t name |
| |- | | |- |
− | | 0x71 || [[#ManageNamedPort]] | + | | 0x71 || Result || [[#ManageNamedPort|ManageNamedPort]] || Handle *out_server_handle, const char *name, int32_t max_sessions |
| |- | | |- |
− | | 0x72 || [[#ConnectToPort]] | + | | 0x72 || Result || [[#ConnectToPort|ConnectToPort]] || Handle *out_handle, Handle port |
| |- | | |- |
− | | 0x73 || [[#SetProcessMemoryPermission]] | + | | 0x73 || Result || [[#SetProcessMemoryPermission|SetProcessMemoryPermission]] || Handle process_handle, uint64_t address, uint64_t size, MemoryPermission perm |
| |- | | |- |
− | | 0x74 || [[#MapProcessMemory]] | + | | 0x74 || Result || [[#MapProcessMemory|MapProcessMemory]] || uintptr_t dst_address, Handle process_handle, uint64_t src_address, size_t size |
| |- | | |- |
− | | 0x75 || [[#UnmapProcessMemory]] | + | | 0x75 || Result || [[#UnmapProcessMemory|UnmapProcessMemory]] || uintptr_t dst_address, Handle process_handle, uint64_t src_address, size_t size |
| |- | | |- |
− | | 0x76 || [[#QueryProcessMemory]] | + | | 0x76 || Result || [[#QueryProcessMemory|QueryProcessMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, Handle process_handle, uint64_t address |
| |- | | |- |
− | | 0x77 || [[#MapProcessCodeMemory]] | + | | 0x77 || Result || [[#MapProcessCodeMemory|MapProcessCodeMemory]] || Handle process_handle, uint64_t dst_address, uint64_t src_address, uint64_t size |
| |- | | |- |
− | | 0x78 || [[#UnmapProcessCodeMemory]] | + | | 0x78 || Result || [[#UnmapProcessCodeMemory|UnmapProcessCodeMemory]] || Handle process_handle, uint64_t dst_address, uint64_t src_address, uint64_t size |
| |- | | |- |
− | | 0x79 || [[#CreateProcess]] | + | | 0x79 || Result || [[#CreateProcess|CreateProcess]] || Handle *out_handle, const arch::CreateProcessParameter *parameters, const uint32_t *caps, int32_t num_caps |
| |- | | |- |
− | | 0x7A || [[#StartProcess]] | + | | 0x7A || Result || [[#StartProcess|StartProcess]] || Handle process_handle, int32_t priority, int32_t core_id, uint64_t main_thread_stack_size |
| |- | | |- |
− | | 0x7B || [[#TerminateProcess]] | + | | 0x7B || Result || [[#TerminateProcess|TerminateProcess]] || Handle process_handle |
| |- | | |- |
− | | 0x7C || [[#GetProcessInfo]] | + | | 0x7C || Result || [[#GetProcessInfo|GetProcessInfo]] || int64_t *out_info, Handle process_handle, ProcessInfoType info_type |
| |- | | |- |
− | | 0x7D || [[#CreateResourceLimit]] | + | | 0x7D || Result || [[#CreateResourceLimit|CreateResourceLimit]] || Handle *out_handle |
| |- | | |- |
− | | 0x7E || [[#SetResourceLimitLimitValue]] | + | | 0x7E || Result || [[#SetResourceLimitLimitValue|SetResourceLimitLimitValue]] || Handle resource_limit_handle, LimitableResource which, int64_t limit_value |
| + | |- |
| + | | 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args |
| |- | | |- |
− | | 0x7F || [[#CallSecureMonitor]]
| |
| |} | | |} |
| | | |
Line 310: |
Line 313: |
| '''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 1,123: |
Line 1,126: |
| </div> | | </div> |
| | | |
− | == GetFutureThreadInfo == | + | == GetDebugFutureThreadInfo == |
| <div style="display: inline-block;"> | | <div style="display: inline-block;"> |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,656: |
Line 1,659: |
| |} | | |} |
| </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,828: |
Line 1,829: |
| 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. |
| | | |
| == MapDeviceAddressSpaceAligned == | | == MapDeviceAddressSpaceAligned == |
Line 1,854: |
Line 1,855: |
| 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. |
| | | |
| == MapDeviceAddressSpace == | | == MapDeviceAddressSpace == |
Line 2,559: |
Line 2,560: |
| ! 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. | + | | Thread || 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. |
| |} | | |} |
| | | |
| == 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,928: |
Line 2,929: |
| |- | | |- |
| | 2 || Execute || Can be set by [[#SetProcessMemoryPermission]] and [[#ControlCodeMemory]]. | | | 2 || Execute || Can be set by [[#SetProcessMemoryPermission]] and [[#ControlCodeMemory]]. |
| + | |- |
| + | | 28 || DontCare || |
| |} | | |} |
| | | |
Line 2,949: |
Line 2,952: |
| | 7-0 || [[#MemoryType]] || | | | 7-0 || [[#MemoryType]] || |
| |- | | |- |
− | | 8 || [[#SetMemoryPermission|PermissionChangeAllowed]] || | + | | 8 || [[#SetMemoryPermission|FlagCanReprotect]] || |
| + | |- |
| + | | 9 || FlagCanDebug || Allows using [[#WriteDebugProcessMemory]] on segments mapped read-only. |
| |- | | |- |
− | | 9 || ForceReadWritableByDebugSyscalls || Allows using [[#WriteDebugProcessMemory]] on segments mapped read-only. | + | | 10 || FlagCanUseIpc || Allows sending this region as an IPC A/B/W buffer with flags=0. |
| |- | | |- |
− | | 10 || IpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=0. | + | | 11 || FlagCanUseNonDeviceIpc || Allows sending this region as an IPC A/B/W buffer with flags=1. |
| |- | | |- |
− | | 11 || NonDeviceIpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=1. | + | | 12 || FlagCanUseNonSecureIpc || Allows sending this region as an IPC A/B/W buffer with flags=3. |
| |- | | |- |
− | | 12 || NonSecureIpcSendAllowed || Allows sending this region as an IPC A/B/W buffer with flags=3. | + | | 13 || FlagMapped || |
| |- | | |- |
− | | 14 || [[#SetProcessMemoryPermission|ProcessPermissionChangeAllowed]] || | + | | 14 || [[#SetProcessMemoryPermission|FlagCode]] || |
| |- | | |- |
− | | 15 || [[#MapMemory|MapAllowed]] || | + | | 15 || [[#MapMemory|FlagCanAlias]] || |
| |- | | |- |
− | | 16 || [[#UnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]] || | + | | 16 || [[#MapProcessCodeMemory|FlagCanCodeAlias]] || |
| |- | | |- |
− | | 17 || [[#CreateTransferMemory|TransferMemoryAllowed]] || | + | | 17 || [[#CreateTransferMemory|FlagCanTransfer]] || |
| |- | | |- |
− | | 18 || [[#QueryPhysicalAddress|QueryPhysicalAddressAllowed]] || | + | | 18 || [[#QueryPhysicalAddress|FlagCanQueryPhysical]] || |
| |- | | |- |
− | | 19 || MapDeviceAllowed ([[#MapDeviceAddressSpace]] and [[#MapDeviceAddressSpaceByForce]]) || | + | | 19 || [[#MapDeviceAddressSpace|FlagCanDeviceMap]] || |
| |- | | |- |
− | | 20 || [[#MapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]] || | + | | 20 || [[#MapDeviceAddressSpaceAligned|FlagCanAlignedDeviceMap]] || |
| |- | | |- |
− | | 21 || [[#SendSyncRequestWithUserBuffer|IpcBufferAllowed]] || | + | | 21 || [[#SendSyncRequestWithUserBuffer|FlagCanIpcUserBuffer]] || |
| |- | | |- |
− | | 22 || IsPoolAllocated/IsReferenceCounted || The physical memory blocks backing this region are refcounted. | + | | 22 || FlagReferenceCounted || The physical memory blocks backing this region are refcounted. |
| |- | | |- |
− | | 23 || [[#MapProcessMemory|MapProcessAllowed]] || | + | | 23 || [[#MapProcessMemory|FlagCanMapProcess]] || |
| |- | | |- |
− | | 24 || [[#SetMemoryAttribute|AttributeChangeAllowed]] || | + | | 24 || [[#SetMemoryAttribute|FlagCanChangeAttribute]] || |
| |- | | |- |
− | | 25 || [4.0.0+] [[#CreateCodeMemory|CodeMemoryAllowed]] || | + | | 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] || |
| |} | | |} |
| | | |
Line 3,036: |
Line 3,041: |
| | 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,046: |
Line 3,051: |
| | 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+] CodeReadOnly || Mapped in kernel during [[#ControlCodeMemory]]. | + | | 0x00402214 || [4.0.0+] GeneratedCode || Mapped in kernel during [[#ControlCodeMemory]]. |
| |- | | |- |
− | | 0x00402015 || [4.0.0+] CodeWritable || Mapped in kernel during [[#ControlCodeMemory]]. | + | | 0x00402015 || [4.0.0+] CodeOut || Mapped in kernel during [[#ControlCodeMemory]]. |
| |} | | |} |
| | | |