Line 14: |
Line 14: |
| | | |
| == SetProgramArgument == | | == SetProgramArgument == |
− | Takes a type-0x9 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input title-id. | + | Takes a type-0x9 input buffer with launch arguments (as string), an u32 (size of arguments string), and an input [[NCM_services#ProgramId|ProgramId]]. No output. |
| | | |
| [11.0.0+] Now takes a type-0x5 buffer instead of type-0x9. Now takes a total of 8-bytes of input, instead of 0x10-bytes total. | | [11.0.0+] Now takes a type-0x5 buffer instead of type-0x9. Now takes a total of 8-bytes of input, instead of 0x10-bytes total. |
Line 22: |
Line 22: |
| | | |
| == FlushArguments == | | == FlushArguments == |
| + | No input/output. |
| + | |
| Clears the loaded processes waiting queue. | | Clears the loaded processes waiting queue. |
| | | |
Line 33: |
Line 35: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#SetProgramArgument]] | + | | 0 || [[#SetProgramArgument2]] |
| |- | | |- |
− | | 1 || [[#FlushArguments]] | + | | 1 || [[#FlushArguments2]] |
| |- | | |- |
| | 2 || [[#GetProcessModuleInfo]] | | | 2 || [[#GetProcessModuleInfo]] |
| |} | | |} |
| + | |
| + | == SetProgramArgument2 == |
| + | Same as [[#SetProgramArgument]]. |
| + | |
| + | == FlushArguments2 == |
| + | Same as [[#FlushArguments]]. |
| | | |
| == GetProcessModuleInfo == | | == GetProcessModuleInfo == |
− | Takes in a u64 Process ID, and a C descriptor out array of [[#ModuleInfo]]s. Returns the number of ModuleInfos copied to output. | + | Takes a type-0xA output buffer of [[#ModuleInfo]] and an input u64 ProcessId. Returns an output s32. |
| | | |
| = ldr:pm = | | = ldr:pm = |
Line 52: |
Line 60: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || CreateProcess | + | | 0 || [[#CreateProcess]] |
| |- | | |- |
| | 1 || [[#GetProgramInfo]] | | | 1 || [[#GetProgramInfo]] |
Line 62: |
Line 70: |
| | 4 || [10.0.0+] [[#SetEnabledProgramVerification]] | | | 4 || [10.0.0+] [[#SetEnabledProgramVerification]] |
| |} | | |} |
| + | |
| + | == CreateProcess == |
| + | Takes an input [[#PinId]], an input [[#CreateProcessFlag]] and an input ResourceLimit handle. Returns an output Process handle. |
| | | |
| == GetProgramInfo == | | == GetProgramInfo == |
− | Takes an ncm::ProgramLocation, parses the NPDM, and writes a [[#ProgramInfo]] to a C descriptor buffer. | + | Takes a type-0x1A output buffer containing a [[#ProgramInfo]] and a [[NCM_services#ProgramLocation|ProgramLocation]]. No output. |
| | | |
| == PinProgram == | | == PinProgram == |
− | Takes an ncm::ProgramLocation, returns a u64 "PinId". | + | Takes a [[NCM_services#ProgramLocation|ProgramLocation]]. Returns an output [[#PinId]]. |
| | | |
| == UnpinProgram == | | == UnpinProgram == |
− | Takes a PinId from [[#PinProgram]]. | + | Takes an input [[#PinId]]. No output. |
| | | |
| == SetEnabledProgramVerification == | | == SetEnabledProgramVerification == |
− | Seems to sets a global flag to inputval & 1.
| + | Takes an input bool. No output. |
| | | |
− | When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA_Format|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort. | + | When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key [[NPDM]] ACID signature fails. This also skips verifying the [[NCA#Header|NCA Header]] signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort. |
| + | |
| + | = CreateProcessFlag = |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || EnableDebug |
| + | |- |
| + | | 1 || DisableAslr |
| + | |} |
| + | |
| + | = PinId = |
| + | This is an u64. |
| | | |
| = ModuleInfo = | | = ModuleInfo = |
Line 90: |
Line 115: |
| | 0x20 | | | 0x20 |
| | 0x8 | | | 0x8 |
− | | ImageAddress | + | | Address |
| |- | | |- |
| | 0x28 | | | 0x28 |
| | 0x8 | | | 0x8 |
− | | ImageSize | + | | Size |
| |} | | |} |
| | | |
Line 106: |
Line 131: |
| | 0x0 | | | 0x0 |
| | 0x1 | | | 0x1 |
− | | MainThreadPrio. Arg1 to svcStartProcess | + | | MainThreadPriority |
| |- | | |- |
| | 0x1 | | | 0x1 |
| | 0x1 | | | 0x1 |
− | | DefaultCpuId. Arg2 to svcStartProcess | + | | DefaultCpuId |
| |- | | |- |
| | 0x2 | | | 0x2 |
− | | 0x1 | + | | 0x2 |
− | | ApplicationType, see [[Process Manager services|here]]. | + | | Flags |
− | |-
| |
− | | 0x3
| |
− | | 0x1
| |
− | | Padding
| |
| |- | | |- |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | MainThreadStackSize. Arg3 to svcStartProcess | + | | MainThreadStackSize |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x8 | | | 0x8 |
− | | TitleIdRange_Min | + | | [[NCM_services#ProgramId|ProgramId]] |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 0x4 | | | 0x4 |
− | | ACID [[NPDM#Service Access Control|Service Access Control]] list size | + | | AcidSacSize |
| |- | | |- |
| | 0x14 | | | 0x14 |
| | 0x4 | | | 0x4 |
− | | ACI0 [[NPDM#Service Access Control|Service Access Control]] list size | + | | AciSacSize |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 0x4 | | | 0x4 |
− | | ACID [[NPDM#FS Access Control|FS Access Control]] buffer size | + | | AcidFacSize |
| |- | | |- |
| | 0x1C | | | 0x1C |
| | 0x4 | | | 0x4 |
− | | ACI0 [[NPDM#FS Access Control|FS Access Control]] buffer size | + | | AciFacSize |
| |- | | |- |
| | 0x20 | | | 0x20 |
− | | <Varies> | + | | 0x10 |
− | | ACID [[NPDM#Service Access Control|Service Access Control]] list | + | | [19.0.0+] Reserved |
| + | |- |
| + | | [19.0.0+] 0x30 ([1.0.0-18.1.0] 0x20) |
| + | | Variable |
| + | | AcidSac |
| |- | | |- |
− | | <Varies> | + | | Variable |
− | | <Varies> | + | | Variable |
− | | ACI0 [[NPDM#Service Access Control|Service Access Control]] list | + | | AciSac |
| |- | | |- |
− | | <Varies> | + | | Variable |
− | | <Varies> | + | | Variable |
− | | ACID [[NPDM#FS Access Control|FS Access Control]] buffer | + | | AcidFac |
| |- | | |- |
− | | <Varies> | + | | Variable |
− | | <Varies> | + | | Variable |
− | | ACI0 [[NPDM#FS Access Control|FS Access Control]] | + | | AciFac |
| |} | | |} |
| | | |
| [[Category:Services]] | | [[Category:Services]] |