Difference between revisions of "NPDM"
Jump to navigation
Jump to search
(Document FS Access Control) |
|||
Line 132: | Line 132: | ||
= FS Access Control = | = FS Access Control = | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 | ||
+ | | 0x4 | ||
+ | | Version (usually 1). | ||
+ | |- | ||
+ | | 0x4 | ||
+ | | 0x8 | ||
+ | | FS Access Rights | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 0x4 | ||
+ | | ContentOwnerIds start offset | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 0x4 | ||
+ | | ContentOwnerIds end offset | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | 0x4 | ||
+ | | SaveDataOwnerIds start offset | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | 0x4 | ||
+ | | SavaDataOwnerIds end offset | ||
+ | |} | ||
+ | === FS Access Rights === | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
− | + | ! Bit and bitmask | |
− | ! Bit | ||
! Description | ! Description | ||
|- | |- | ||
− | | 0 | + | | <code>0</code>, <code>0x1</code> |
− | | | + | | ApplicationInfo (MountContent* is accessible when set) |
− | | | + | |- |
+ | | <code>1</code>, <code>0x2</code> | ||
+ | | BootModeControl | ||
+ | |- | ||
+ | | <code>2</code>, <code>0x4</code> | ||
+ | | Calibration (Enables access to [[Filesystem_services|Bis]] partitionID 27 and 28) | ||
+ | |- | ||
+ | | <code>3</code>, <code>0x8</code> | ||
+ | | SystemSaveData | ||
+ | |- | ||
+ | | <code>4</code>, <code>0x10</code> | ||
+ | | GameCard | ||
+ | |- | ||
+ | | <code>5</code>, <code>0x20</code> | ||
+ | | SaveDataBackup | ||
+ | |- | ||
+ | | <code>6</code>, <code>0x40</code> | ||
+ | | SaveDataManagement | ||
+ | |- | ||
+ | | <code>7</code>, <code>0x80</code> | ||
+ | | BisAllRaw | ||
+ | |- | ||
+ | | <code>8</code>, <code>0x100</code> | ||
+ | | GameCardRaw | ||
+ | |- | ||
+ | | <code>9</code>, <code>0x200</code> | ||
+ | | GameCardPrivate | ||
+ | |- | ||
+ | | <code>10</code>, <code>0x400</code> | ||
+ | | SetTime | ||
+ | |- | ||
+ | | <code>11</code>, <code>0x800</code> | ||
+ | | ContentManager | ||
+ | |- | ||
+ | | <code>12</code>, <code>0x1000</code> | ||
+ | | ImageManager | ||
+ | |- | ||
+ | | <code>13</code>, <code>0x2000</code> | ||
+ | | CreateSaveData | ||
+ | |- | ||
+ | | <code>14</code>, <code>0x4000</code> | ||
+ | | SystemSaveDataManagement | ||
+ | |- | ||
+ | | <code>15</code>, <code>0x8000</code> | ||
+ | | BisFileSystem | ||
+ | |- | ||
+ | | <code>16</code>, <code>0x10000</code> | ||
+ | | SystemUpdate | ||
+ | |- | ||
+ | | <code>17</code>, <code>0x20000</code> | ||
+ | | SaveDataMeta | ||
+ | |- | ||
+ | | <code>18</code>, <code>0x40000</code> | ||
+ | | DeviceSaveControl | ||
+ | |- | ||
+ | | <code>19</code>, <code>0x80000</code> | ||
+ | | SettingsControl | ||
|- | |- | ||
− | | | + | | <code>62</code>, <code>0x4000000000000000</code> |
− | | | + | | Debug |
− | |||
|- | |- | ||
− | | | + | | <code>63</code>, <code>0x8000000000000000</code> |
− | | | + | | FullPermission |
− | |||
|} | |} | ||
Web-applets access control: | Web-applets access control: | ||
− | * "LibAppletWeb" and "LibAppletOff" have same access control: word0 bit0 set, | + | * "LibAppletWeb" and "LibAppletOff" have same access control: word0 bit0 set, '''ApplicationInfo''' and '''SystemSaveData''' set, and '''Debug''' set. |
− | * Rest of the web-applets: Same as above except | + | * Rest of the web-applets: Same as above except '''ApplicationInfo''' isn't set. |
= Service Access Control = | = Service Access Control = |
Revision as of 13:58, 18 July 2017
This is the Switch equivalent of 3DS exheader. This is the file with extension ".npdm" in {Switch ExeFS}. The size of this file varies.
Offset | Size | Description |
---|---|---|
0x0 | 0x80 | META |
0x80 | <Varies> | ACID |
<See META> | <See META> | ACI0 |
META
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Magic "META". |
0xE | 1 | |
0xF | 1 | |
0x1C | 4 | |
0x20 | ? | Title name |
0x70 | 0x4 | #ACI0 offset |
0x74 | 0x4 | #ACI0 size |
0x78 | 0x4 | #ACID offset |
0x7C | 0x4 | #ACID size |
ACID
Offset | Size | Description |
---|---|---|
0 | 0x100 | RSA-2048 signature |
0x100 | 0x100 | RSA-2048 public key |
0x200 | 0x4 | Magic "ACID". |
0x204 | 0x8 | Zeroes |
0x20C | 0x4 | Retail flag. Must be 1 on retail, on devunit 0 is also allowed. |
0x210 | 0x8 | Title id |
0x218 | 0x8 | Title id again |
0x220 | 0x4 | #FS Access Control offset |
0x224 | 0x4 | #FS Access Control size |
0x228 | 0x4 | #Service Access Control offset |
0x22C | 0x4 | #Service Access Control size |
0x230 | 4 | #Kernel Access Control offset |
0x234 | 4 | #Kernel Access Control size |
0x238 | 0x8 | Padding |
ACI0
Looks like an old crappy version of ACID. It has the guessed version field 0 instead of 1.
FS Access Control
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Version (usually 1). |
0x4 | 0x8 | FS Access Rights |
0xC | 0x4 | ContentOwnerIds start offset |
0x10 | 0x4 | ContentOwnerIds end offset |
0x14 | 0x4 | SaveDataOwnerIds start offset |
0x18 | 0x4 | SavaDataOwnerIds end offset |
FS Access Rights
Bit and bitmask | Description |
---|---|
0 , 0x1
|
ApplicationInfo (MountContent* is accessible when set) |
1 , 0x2
|
BootModeControl |
2 , 0x4
|
Calibration (Enables access to Bis partitionID 27 and 28) |
3 , 0x8
|
SystemSaveData |
4 , 0x10
|
GameCard |
5 , 0x20
|
SaveDataBackup |
6 , 0x40
|
SaveDataManagement |
7 , 0x80
|
BisAllRaw |
8 , 0x100
|
GameCardRaw |
9 , 0x200
|
GameCardPrivate |
10 , 0x400
|
SetTime |
11 , 0x800
|
ContentManager |
12 , 0x1000
|
ImageManager |
13 , 0x2000
|
CreateSaveData |
14 , 0x4000
|
SystemSaveDataManagement |
15 , 0x8000
|
BisFileSystem |
16 , 0x10000
|
SystemUpdate |
17 , 0x20000
|
SaveDataMeta |
18 , 0x40000
|
DeviceSaveControl |
19 , 0x80000
|
SettingsControl |
62 , 0x4000000000000000
|
Debug |
63 , 0x8000000000000000
|
FullPermission |
Web-applets access control:
- "LibAppletWeb" and "LibAppletOff" have same access control: word0 bit0 set, ApplicationInfo and SystemSaveData set, and Debug set.
- Rest of the web-applets: Same as above except ApplicationInfo isn't set.
Service Access Control
This is a list of service-name strings which the title has access to, with the following structure:
+0: control_byte +1: {service-name without nul-terminator}
Bitmask 0x0F in control_byte is the {length of the service-name without nul-terminator} - 1.
Bitmask 0x80 in control_byte means service is allowed to be registered.
The service string can contain a wildcard *
character.
Kernel Access Control
On Switch, descriptors are identified by pattern 01..11 in low bits.
Pattern of lower bits | Type | Fields |
---|---|---|
0bxxxxxxxxxxxx0111
|
Kernel flags | Bit31-24: Highest allowed cpu id, bit23-16: Lowest allowed cpu id, bit15-10: Highest allowed thread prio, bit9-4: Lowest allowed thread prio |
0bxxxxxxxxxxx01111
|
Syscall mask | Bits 29-31: Syscall mask table index; Bits 5-28: Mask |
0bxxxxxxxxx0111111
|
Map IO page (RW) | Bits 7-31: Page |
0bxxxxxxxx01111111
|
Map IO range | Bits 7-30: Alternating start page and number of pages, bit31: Alternating read-only flag then MemoryAttribute 0x2001/0x42002 selector flag |
0bxxxx011111111111
|
Interrupt pair | Bits 12-21: Irq0, bits 20-31: Irq1, 0x3FF means empty. |
0xxxx0111111111111
|
||
0xxx01111111111111
|
||
0xx011111111111111
|
||
0x0111111111111111
|
||
All ones | Ignored |