NPDM: Difference between revisions
		
		
		
		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 14: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 |