From Vita Development Wiki
Jump to: navigation, search

SceIofilemgr is the primary interface for file IO. Read File Management for more information on file IO.



This module exists only in non-secure world. The SELF can be found in os0:kd/iofilemgr.skprx.

Known NIDs

Version Name World Privilege NID
1.69 SceIofilemgr Non-secure Kernel 0x3E244C17
3.60 SceIofilemgr ? Kernel 0x9642948C


Known NIDs

Version Name World Visibility NID
1.69 SceIofilemgrForDriver Non-secure Kernel 0x40FD29C7
3.60 SceIofilemgrForDriver Non-secure Kernel 0x40FD29C7
1.69 SceIofilemgr Non-secure User 0xF2FF276E
3.60 SceIofilemgr Non-secure User 0xF2FF276E

Mount Points

This table is stored in data segment of SceIofilemgr as array of vfs_mount_point_info elements.

When sceVfsMount is executed it finds vfs_add_data element by filesystem string and then selects appropriate mount scenario by devMinor and devMajor.

  • <rnd> means random numeric string of length 13
Unix Mount Dev Major Dev Minor Filesystem Vita Mount Block Device VSH Mount Id
/tty 0x4000020 0x6003 dummy_ttyp_dev_fs tty dummy_ttyp_dev_fs 0x0
/dev 0x10 0x3 sdstor_dev_fs sdstor0: sd 0x1
/md 0x10 0x2003 md_dev_fs md0: md 0x2
/sd/exfat 0x2030001 0x30002 exfat sd0: sdstor0:ext-pp-act-a, sdstor0:ext-lp-act-entire 0x100
/os/exfat 0x1000001 0x1002 exfat os0: sdstor0:int-lp-act-os 0x200
/vs/exfat 0x1000001 0x1002 exfat vs0: sdstor0:int-lp-ign-vsh 0x300
/vd/exfat 0x1000001 0x10002 exfat vd0: sdstor0:int-lp-ign-vshdata 0x400
/tm/exfat 0x1000001 0x10002 exfat tm0: sdstor0:int-lp-ign-vtrm 0x500
/ur/exfat 0x1000001 0x50002 exfat ur0: sdstor0:int-lp-ign-user 0x600
/ud/exfat 0x1000001 0x10002 exfat ud0: sdstor0:int-lp-ign-updater 0x700
/ux/exfat 0x2020001 0x30002 exfat ux0: sdstor0:xmc-lp-ign-userext / sdstor0:int-lp-ign-userext 0x800
/gro/exfat 0x2010001 0x21002 exfat gro0: sdstor0:gcd-lp-ign-gamero 0x900
/grw/exfat 0x2010001 0x20002 exfat grw0: sdstor0:gcd-lp-ign-gamerw 0xA00
/sa/exfat 0x1000001 0x1002 exfat sa0: sdstor0:int-lp-ign-sysdata 0xB00
/pd/exfat 0x1000001 0x1002 exfat pd0: sdstor0:int-lp-ign-pidata 0xC00
/imc/exfat 0x2020001 0x30002 exfat imc0: sdstor0:int-lp-ign-userext 0xD00
/xmc/exfat 0x2020001 0x30002 exfat xmc0: sdstor0:xmc-lp-ign-userext 0xE00
/uma/exfat 0x2030001 0x2 exfat uma0: sdstor0:uma-pp-act-a, sdstor0:uma-lp-act-entire 0xF00
/lma/exfat 0x1 0x5 exfat lma0: / 0x10000
/lmb/exfat 0x1 0x5 exfat lmb0: / 0x20000
/mfa/exfat 0x1 0x5 exfat mfa0: / 0x50000
/mfb/exfat 0x1 0x5 exfat mfb0: / 0x60000
/PD<rnd> 0x3 0x1001 PFS_GDSD_INF PD<rnd>0 0x0

Block Device Naming Rules

First level prefix: hardware device

  • int: internal eMMC
  • ext: external sdcard?
  • gcd: gamecard
  • mcd: ?
  • uma: USB mass for PSTV (or pins on FAT PSVita)
  • usd: ?
  • xmc: external memory card

Second level prefix: partition table style?

  • lp: sce partition table?
  • pp: mbr partition table?

Third level prefix: active/backup selection (only used for SBL and os0:)

  • ina: inactive
  • act: active
  • ign: ignore (for devices that don't support this)

Fourth level prefix: partition

  • a
  • unused
  • idstor
  • sloader
  • os
  • vsh
  • vshdata
  • vtrm
  • user
  • userext
  • gamero
  • gamerw
  • updater
  • sysdata
  • mediaid
  • pidata
  • entire

Partition Block Devices

Each partition has numeric alias (string) that looks like to be used to reference the partition.

Numeric names most likely follow order of partitions in MBR.

To access device node use /dev prefix (like /dev/gcd-lp-ign-gamero).

In total there can be 16 aliases from 0 to 15 per physical device (eMMC, Game Card, Memory Card). Alias 16 is hardcoded and is called entire.

Aliases 0-15 correspond to eMMC.

Aliases 100-115 correspond to Game Card.

Aliases 200-215 correspond to Memory Card.

block device numeric name
int-lp-ign-idstor (need to confirm) 000
int-lp-ign-sloader (need to confirm) 001
- 002
int-lp-act-os 003
- 004
int-lp-ign-sysdata 005
int-lp-ign-vtrm 006
int-lp-ign-vsh 007
int-lp-ign-vshdata 008
int-lp-ign-updater 009
int-lp-ign-pidata 010
int-lp-ign-user 011
int-lp-ign-userext 012
int-lp-act-entire 016
gcd-lp-ign-gamero, gcd-lp-act-mediaid (need to confirm) 100
gcd-lp-ign-gamerw (need to confirm) 101
ext-lp-act-entire (need to confirm) 116
mcd-lp-act-mediaid 200
- 201
mcd-lp-act-entire (need to confirm) 216

VFS Implementation

Information can be found on separate page VFS Implementation


typedef struct vfs_node_info //size is 0x38
   char name[0x20];
   vfs_node* node; //can be zero
   uint32_t unk_24; // probably size of vfs_node
   uint32_t unk_28; // probably flags
   vfs_node_info* node_info_2C; //can be zero
   vfs_node_info* node_info_30; //can be zero
   vfs_node_info* node_info_34; //can be zero
} vfs_node_info;

//looks like this structure is used to get some response into "error" field
//when executing sceKernelSignalCondTo calls
//this structure is used by SceIofileDaemon when it monitors mount/unmount async requests
//in SceIofilemgrMount thread using SceIofilemgrMount conditional variable
//upon completion it issues the signal and result of operation is stored in error field
//it looks like operations 1/2 are used for normal filesystems
//operations 3/4 are used for PFS_GDSD_INF filesystem
typedef struct cond_ctx
   uint32_t op_index; //operation index. 1,3 - mount. 2,4 - unmount
   uint32_t unk_4;
   uint32_t unk_8;
   uint32_t unk_C;
   uint32_t unk_10;
   uint32_t unk_14;
   uint32_t unk_18;
   uint32_t unk_1C;
   int error; //either error code or 0
   cond_ctx* next; //0 means end of list
} cond_ctx;

typedef struct ctx_19D4
   void* unk_0; 
   uint32_t unk_4;
   vfs_node* offset; // pool of vfs_nodes with 0x1000 elements.
                     // it is used in sceVfsGetNewNode, mount/unmount and node find routines
   uint32_t size;

   uint32_t count;
   uint32_t unk_14;
   uint32_t unk_18;
   uint32_t unk_1C;
} ctx_19D4;

typedef struct ctx_11C //size is 0x220
   void* unk_0; 
   uint32_t unk_4;
   void* offset; // pointer to array of byte size 0x10000 with 0x40 elements of size 0x400
   uint32_t size;

   uint32_t count;

   uint8_t data[0x20C];
} ctx_11C;

typedef struct io_scheduler_dispatcher //size is 0xB8
   char unk_0[0x50];

   io_scheduler* unk_50; // Internal
   io_scheduler* unk_54; // Game Card
   io_scheduler* unk_58; // Removable
   io_scheduler* unk_5C; // Host File System
   io_scheduler* unk_60; // Default
   uint32_t unk_64; // pointer to unknown module data section
   uint32_t unk_68; //SceIoSchedulerDispatcher fast mutex
   uint32_t unk_6C;
   char unk_70[0x30];
   uint32_t unk_A0;
   uint32_t unk_A4;
   SceUID unk_A8; //SceIoSchedulerDispatcher event flag uid
   uint32_t unk_AC; // counter
   uint32_t unk_B0; // flag
   uint32_t unk_B4; // 0
} io_scheduler_dispatcher;

typedef struct io_scheduler_item //size is 0x14 - allocated from SceIoScheduler heap
   io_scheduler* unk_0; // parent
   uint32_t unk_4; // 0
   uint32_t unk_8; // 0
   uint32_t unk_C; // 0
   uint32_t unk_10; // pointer to unknown module data section
} io_scheduler_item;

enum io_device_code
  Internal = 0x100,
  Game_Card = 0x201,
  Removable = 0x202,
  Host_File_System = 0x300,
  Default = 0x0

typedef struct io_scheduler //size is 0xA8 - allocated from SceIoScheduler heap
   io_device_code unk_0; 
   io_scheduler_item* unk_4; //item 0
   io_scheduler_item* unk_8; //item 1
   io_scheduler_item* unk_C; //item 2
   io_scheduler_item* unk_10; //item 3
   io_scheduler_item* unk_14; //item 4
   io_scheduler_item* unk_18; //item 5
   io_scheduler_item* unk_1C; //item 6
   io_scheduler_item* unk_20; //item 7
   io_scheduler_item* unk_24; //item 8
   io_scheduler_item* unk_28; //item 9
   io_scheduler_item* unk_2C; //item 10
   io_scheduler_item* unk_30; //item 11
   io_scheduler_item* unk_34; //item 12
   io_scheduler_item* unk_38; //item 13
   io_scheduler_item* unk_3C; //item 14
   io_scheduler_item* unk_40; //item 15
   uint32_t unk_44; // flag1 0x40000 or 0x00
   uint32_t unk_48; // flag2 0x40000 or 0x00
   io_scheduler_dispatcher* unk_4C; // parent
   SceUID unk_50; //SceIoScheduler mutex
   SceUID unk_54; //SceIoScheduler cond
   char unk_58; // 0
   char unk_59; // 0
   char unk_5A; // 0
   char unk_5B; // 0
   uint32_t unk_5C; // 0
   //this is probably separate structure
   SceUID unk_60; //SceIoSchedWorker thread id
   SceUID unk_64; //SceIoScheduler mutex from self
   SceUID unk_68; //SceIoScheduler cond from self
   io_scheduler* unk_6C; //pointer to self
   uint32_t unk_70; // 0
   uint16_t unk_74; // 0
   uint16_t unk_76; // 0
   uint32_t unk_78; // 0
   uint32_t unk_7C; // 0
   uint32_t unk_80; //
   uint32_t unk_84; // some flag
   uint32_t unk_88; //0x80
   uint32_t unk_8C; //0x80
   uint32_t unk_90; //0x80
   uint32_t unk_94; //0x80
   uint32_t unk_98; //0x80
   uint32_t unk_9C; //0x80
   uint32_t unk_A0; // 0
   uint32_t unk_A4; // 0

} io_scheduler;

//context that is used for dispatching i/o operations

typedef struct io_context //size is 0xB8
   uint32_t unk_0;
   uint32_t unk_4;
   uint32_t unk_8;
   uint32_t unk_C;
   uint16_t unk_10;
   uint16_t unk_12;
   uint16_t unk_14;
   uint16_t unk_16;
   void *data_0; //0x18
   uint32_t unk_1C;
   SceSize size_0; //0x20
   uint32_t io_op_index; // 0x24
   uint32_t ioctlOutdata0;
   io_device_code device_code; // 0x2C - ioctlOutdata1
   char async; //0x30
   char unk_31;
   char unk_32;
   char unk_33;
   uint32_t pid; //0x34 = ksceKernelGetProcessId
   uint32_t tid; //0x38 = ksceKernelGetThreadId
   uint32_t unk_3C; // = SceThreadmgrForDriver_fa54d49a
   uint32_t unk_40; // = SceThreadmgrForDriver_332e127c
   uint32_t cpu_mask; // 0x44 = ksceKernelGetThreadCpuAffinityMask
   uint32_t thread_priority; //0x48 = ksceKernelGetThreadCurrentPriority
   void* list0; //0x4C pointer to some linked list with elements of size 0x14 
   uint32_t listSize; //0x50 = number of items in linst
   void* list1; //0x54 = pointer to some linked list with elements of size 0x14 
   uint32_t sizeOfList; //0x58 = size of list in bytes
   uint16_t state; // 0x5C = bit 16 of state where state = (MRC p15, 0, state, c13, c0, 3)
   uint16_t unk_5E;
   uint32_t unk_60;
   SceUID fd; //0x64
   void *data_1; //0x68
   uint32_t unk_6C;
   SceSize size_1; //0x70
   uint32_t unk_74;
   uint32_t unk_78; // = -1
   uint32_t unk_7C; // = -1
   uint32_t op_result; // 0x80 - result of i/o operation
   uint32_t unk_84;
   void* unk_88;
   uint32_t unk_8C;
   uint32_t unk_90;
   uint32_t unk_94;
   uint32_t unk_98;
   uint32_t unk_9C;
   uint32_t unk_A0;
   uint32_t unk_A4;
   uint32_t unk_A8;
   uint32_t unk_AC;
   SceInt64 unk_B0; // = ksceKernelGetSystemTimeWide
} io_context;

Data segment layout

Address Size Description
0x0000 0x4 unknown
0x0004 0x8 some index returned from initialization function 0xb645c7ef in SceThreadmgrForDriver
0x0008 0x4 unknown
0x000C 0x4 flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel
0x00010 0x4 flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel
0x00014 0x4 flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel
0x00018 0x4 flag that enables usage of sceFiosKernel functions (like OverlayResolveSync) in i/o operations in transition from user to kernel
0x0001C 0x4 unknown
0x0020 0x4 SceIofileDevWaitForVC event flag SceUID
0x0024 0x4 unknown
0x0028 0x4 SceIofileDevWaitForSD event flag SceUID
0x002C 0x4 pointed by vfs_mount_cc for SceIofileDevWaitForSD
0x0030 0x4 SceIofileDevWaitForMC event flag SceUID
0x0034 0x4 unknown
0x0038 0x4 pointed by vfs_mount_cc for SceIofileDevWaitForVC
0x003C 0x4 pointed by vfs_mount_cc for SceIofileDevWaitForMC
0x0040 0x10 unknown
0x0050 0x4 address of some callback function called in all vfs operations
0x0054 0x4 SceIofile heap SceUID
0x0058 0x80 unknown
0x00D8 0x4 SceIoVfsHeap heap SceUID
0x00DC 0x4 SceIoFileDebug memblock SceUID
0x00E0 0x3C unknown
0x011C 0x4 ctx_11C* pointer to structure
0x0120 0x4C unknown
0x016C 0x10 char* static_buffers[4] - static buffers used instead of SceIoVfsHeap
0x017C 0x2C SceClass for SceVfsFile
0x01A8 0x1500 array of 96 elements of vfs_node_info
0x16A8 0x4 SceVfsRfsLock fast mutex
0x16AC 0x3C unknown
0x16E8 0x2C SceClass for SceIoMountEvent
0x1714 0xC unknown
0x1720 0x04 cond_ctx* pointer to the linked list
0x1724 0x4 SceIoScheduler heap SceUID
0x1728 0xB8 io_scheduler_dispatcher structure
0x17E0 0x2C SceClass for SceIoAsyncEvent - used in all async i/o operations
0x180C 0xC unknown
0x1818 0x2C SceClass for SceIoErrorEvent
0x1844 0xC unknown
0x1850 0x4 SceIofileDaemonLock fast mutex
0x1854 0x40 unknown
0x1894 0x4 SceIofile fast mutex
0x1898 0x7C unknown
0x1914 0x4 function pointer t_1914_callback
0x1918 0x4 SceIofileFlock fast mutex
0x191C 0x44 unknown
0x1960 0x4 some i/o flag
0x1964 0x4 flag that indicates that any i/o operation happened 1/0. changed by each i/o operation. cleared on suspend.
0x1968 0x18 unknown
0x1980 0x4 counter of not finished i/o operations. changed by each i/o operation.
0x1984 0xC unknown
0x1990 0x4 SceVfsMntlistLock fast mutex
0x1994 0x3C unknown
0x19D0 0x4 vfs_mount* singly linked list
0x19D4 0x1C structure ctx_19D4
0x19F0 0x8 unknown
0x19F8 0x4 address used for ksceKernelCpuSuspendIntr to lock 016C
0x19FC 0x4 vfs_mount* pointer
0x1A00 0x4 SceVfsNcacheLock fast mutex
0x1A04 0x40 unknown
0x1A44 0x4 address used for ksceKernelCpuSuspendIntr
0x1A48 0x4 unknown
0x1A4C 0x4 SceVfsLock fast mutex
0x1A50 0x3C unknown
0x1A8C 0x04 SceIofilemgrMount thread SceUID
0x1A90 0x700 array of 32 elements of vfs_mount_point_info
0x2190 0x4 SceIofilemgrMount cond SceUID
0x2194 0x4 SceIofilemgrMount SceUID mutexid
0x2198 0x4 flag that indicates that IoSchedulerDispatcher functionality is initialized 1/0
0x219C 0x4 unknown
0x21A0 0x40 unknown
0x21E0 0x20 unknown
0x2200 0x04 SceIofilemgrDaemon thread SceUID
0x2204 0x8 unknown
0x220C 0x4 SceIofilemgrDaemon event flag SceUID
0x2210 0x4 void* to heap alloc of size 0x100
0x2214 0x4 void* to heap alloc of size 0x100
0x2218 0x4 = 3
0x221C 0x20 vfs_add_data dummy_ttyp_dev_fs node



Version NID
3.60 0xD070BC48

operation index 1 in cond_ctx

// intermediate function between sceAppMgrGameDataMountForDriver and sceVfsMount
int sceIoMountForDriver(int vshMountId, const char *path, int permission, int unk3, int arg_0, int arg_4);


Version NID
3.60 0x20574100

operation index 2 in cond_ctx

// intermediate function between sceAppMgrUmountForDriver and sceVfsUnmount
int sceIoUmountForDriver(int vshMountId, int unk1, int unk2, int unk3);


Version NID
3.60 0xFEEE44A9

operation index 3 in cond_ctx

// this function can be used with PFS_GDSD_INF filesystem
int scePfsMgrVfsMountForDriver(vfs_mount_point_info_base* mnt, int unk1, int unk2);


Version NID
3.60 0xD220539D

operation index 4 in cond_ctx

int scePfsMgrVfsUmountForDriver(vfs_unmount_data* umnt, int unk1, int unk2);


Version NID
3.60 0xAA45010B

calls ksceKernelWaitEventFlag using event_flag_SceVfsVnode from vfs_node

int sceVfsNodeWaitEventFlag(vfs_node* node)


Version NID
3.60 0x6048F245

calls ksceKernelSetEventFlag using event_flag_SceVfsVnode from vfs_node

int sceVfsNodeSetEventFlag(vfs_node* node)


Version NID
1.69 0x9C7E7B76
3.60 0x9C7E7B76
int sceVfsUnmount(vfs_unmount_data *data);


Version NID
1.69 0x9CBFA725
3.60 0x9CBFA725
int sceVfsDeleteVfs(const char *name, void **deleted_node);


Version NID
1.69 0x673D2FCD
3.60 0x673D2FCD
int sceVfsAddVfs(vfs_add_data *data);


Version NID
1.69 0xB62DE9A6
3.60 0xB62DE9A6
int sceVfsMount(vfs_mount_point_info_base* mnt);


Version NID
1.69 0xD60B5C63
3.60 0xD60B5C63
int sceVfsGetNewNode(vfs_mount* mount, node_ops2 *ops, int unused, vfs_node **node);


Version NID
1.69 0x20CF5FC7
3.60 0x20CF5FC7

Call interface is same as sceIoDread

int sceIoDreadForDriver(SceUID fd, SceIoDirent *dir);


Version NID
3.60 0x03051B02

Derived from _vshIoDread

Implementation is completely the same as sceIoDreadForDriver. The only difference is that st_attr in SceIoStat is not set.

int sceIoDreadForDriver_2(SceUID fd, SceIoDirent *dir);


Version NID
1.69 0x21EE91F0
3.60 0x21EE91F0

Call interface is same as sceIoWrite

int sceIoWriteForDriver(SceUID fd, const void *data, SceSize size);


Version NID
1.69 0x463B25CC
3.60 0x463B25CC

Call interface is same as sceIoDopen

SceUID sceIoDopenForDriver(const char *dirname);


Version NID
1.69 0x62090481
3.60 0x62090481

Call interface is same as sceIoLseek

 SceOff sceIoLseekForDriver(SceUID fd, SceOff offset, int whence);


Version NID
1.69 0x75192972
3.60 0x75192972

Call interface is same as sceIoOpen.

SceUID sceIoOpenForDriver(const char *filename, int flag, SceIoMode mode);


Version NID
3.60 0xC3D34965

This is a wrapper for sceIoOpenForDriver.

Pid is used for sceFiosKernelOverlayResolveSyncForDriver.

SceUID sceIoOpenForPidForDriver(SceUID pid, const char *filename, int flag, SceIoMode mode);


Version NID
1.69 0x7D42B8DC
3.60 0x7D42B8DC

Call interface is same as sceIoChstat

int sceIoChstatForDriver(const char *name, const SceIoStat *buf, unsigned int cbit);


Version NID
3.60 0x1F98BD50

Derived from _vshIoChstat

Implementation is completely the same as sceIoChstatForDriver. The only difference is that (bits = bits & (~0x10000)) operation is not applied.

int sceIoChstatForDriver_2(const char *name, const SceIoStat *buf, unsigned int cbit);


Version NID
1.69 0x75C96D25
3.60 0x75C96D25

Call interface is same as sceIoGetstat

int sceIoGetstatForDriver(const char *name, SceIoStat *buf);


Version NID
3.60 0xD6503624

Derived from _vshIoGetstat

Implementation is completely the same as sceIoGetstatForDriver. The only difference is that st_attr in SceIoStat *buf is not set.

int sceIoGetstatForDriver_2(const char *name, SceIoStat *buf);


Version NID
1.69 0x7F710B25
3.60 0x7F710B25

Call interface is same as sceIoMkdir

int sceIoMkdirForDriver(const char *dirname, SceIoMode mode);


Version NID
1.69 0xE17EFC03
3.60 0xE17EFC03

Call interface is same as sceIoRead

int sceIoReadForDriver(SceUID fd, void *buf, SceSize nbyte);


Version NID
1.69 0xF99DD8A3
3.60 0xF99DD8A3

Call interface is same as sceIoClose

int sceIoCloseForDriver(SceUID fd);


Version NID
1.69 0xDC0C4997
3.60 0xDC0C4997

Call interface is same as sceIoRename

int sceIoRenameForDriver(const char *oldname, const char *newname);


Version NID
1.69 0x0D7BB3E1
3.60 0x0D7BB3E1

Call interface is same as sceIoRemove

int sceIoRemoveForDriver(const char *filename);


Version NID
3.60 0x6D59658D

Derived from sceIoCancel


Version NID
3.60 0x7EC442BF

Derived from _sceIoChstatAsync


Version NID
3.60 0xEC974400

Derived from sceIoChstatByFdAsync


Version NID
3.60 0xDF57A75F

Derived from _sceIoChstatByFd

int sceIoChstatByFdForDriver(SceUID fd, const SceIoStat *buf, unsigned int cbit);


Version NID
3.60 0x11C57CC6

Derived from sceIoCloseAsync


Version NID
3.60 0xA9302946

Derived from _sceIoDevctlAsync


Version NID
3.60 0x16882FC4

Derived from _sceIoDevctl

int sceIoDevctlForDriver(const char *devname, int cmd, const void *arg, SceSize arglen, void *bufp, SceSize buflen);
// Return: >=0 on success (driver-dependent)


Version NID
3.60 0x19C81DD6

Derived from sceIoDclose

int sceIoDcloseForDriver(SceUID fd);


Version NID
3.60 0x16336A0D

Derived from sceIoFlockForSystem


Version NID
3.60 0x0FEE1238

Derived from sceIoGetstatByFdAsync


Version NID
3.60 0x462F059B

Derived from _sceIoGetstatByFd

int sceIoGetstatByFdForDriver(SceUID fd, SceIoStat *buf);
// Return: 0 on success


Version NID
3.60 0x94A5304A

Derived from _sceIoGetstatAsync


Version NID
3.60 0xB761E91B

Derived from _sceIoIoctlAsync


Version NID
3.60 0x161CD33F

Derived from _sceIoIoctl

int sceIoIoctlForDriver(SceUID fd, int cmd, const void *argp, SceSize arglen, void *bufp, SceSize buflen);
// Return: >=0 on success (driver-dependent)


Version NID
3.60 0x541BAABD

Derived from _sceIoLseekAsync


Version NID
3.60 0x27003443

Derived from _sceIoMkdirAsync


Version NID
3.60 0x451001DE

Derived from _sceIoOpenAsync


Version NID
3.60 0x64A46A2C

Derived from _sceIoPreadAsync


Version NID
3.60 0x2A17515D

Derived from _sceIoPread

int sceIoPreadForDriver(SceUID uid, void *data, int size, SceOff offset);
// Return: Number of bytes actually read


Version NID
3.60 0x202CDDE3

Derived from _sceIoPwriteAsync


Version NID
3.60 0x5F1512C8

Derived from _sceIoPwrite

int sceIoPwriteForDriver(SceUID fd, const void *buf, SceSize nbyte, SceOff offset);
// Return: Number of bytes actually written


Version NID
3.60 0x69047C81

Derived from sceIoReadAsync


Version NID
3.60 0xF9D6507D

Derived from _sceIoRemoveAsync


Version NID
3.60 0xAACBC47A

Derived from _sceIoRenameAsync


Version NID
3.60 0xF5B0B36C

Derived from _sceIoRmdirAsync


Version NID
3.60 0x1CC9C634

Derived from _sceIoRmdir

int sceIoRmdirForDriver(const char *dirname);


Version NID
3.60 0x041209CF

Derived from sceIoSyncByFdAsync


Version NID
3.60 0x43170575

Derived from sceIoSyncByFd

int sceIoSyncByFdForDriver(SceUID fd, int flag);


Version NID
3.60 0x4F9EA8B0

Derived from _sceIoSyncAsync


Version NID
3.60 0xDDF78594

Derived from _sceIoSync

int sceIoSyncForDriver(const char *device, unsigned int flag);


Version NID
3.60 0xA1BD13D0

Derived from sceIoWriteAsync


Version NID
3.60 0xCE397158


Version NID
3.60 0xABE65071


Version NID
3.60 0x72F06BDE


Version NID
3.60 0xC08F199F


Version NID
3.60 0x5982B0E3


Version NID
3.60 0x0E518FA9

thread callback for sceIoOpenForDriver

typedef struct sceIoOpenForDriver_args
  const char *filename;
  int flag;
  SceIoMode mode;
} sceIoOpenForDriver_args;

SceUID t_sceIoOpenForDriver(sceIoOpenForDriver_args* args);


Version NID
3.60 0x1AE14011

thread callback for sceIoCloseForDriver

typedef struct sceIoCloseForDriver_args
  SceUID fd;
} sceIoCloseForDriver_args;

int t_sceIoCloseForDriver(sceIoCloseForDriver_args* args);


Version NID
3.60 0x809892C1

thread callback for sceIoReadForDriver

typedef struct sceIoReadForDriver_args
  SceUID fd;
  void *data;
  SceSize size;
} sceIoReadForDriver_args;

int t_sceIoReadForDriver(sceIoReadForDriver_args* args);


Version NID
3.60 0x8598ADC3

thread callback for sceIoWriteForDriver

typedef struct sceIoWriteForDriver_args
  SceUID fd;
  const void *data;
  SceSize size;
} sceIoWriteForDriver_args;

int t_sceIoWriteForDriver(sceIoWriteForDriver_args* args);


Version NID
3.60 0xC1DD4317

thread callback for sceIoIoctlForDriver

typedef struct sceIoIoctlForDriver_args
  SceUID fd;
  unsigned int cmd;
  void *indata;
  int inlen;
  void *outdata;
  int outlen;
} sceIoIoctlForDriver_args;

SceOff t_sceIoLseekForDriver(sceIoIoctlForDriver* args);


Version NID
3.60 0xBCE4865B

thread callback for sceIoChstatForDriver

typedef struct sceIoChstatForDriver_args
   const char *name;
   const SceIoStat *buf;
   unsigned int cbit;
   uint32_t store_attr;
} sceIoChstatForDriver_args;

SceOff t_sceIoChstatForDriver(sceIoChstatForDriver_args* args);


Version NID
3.60 0x7517FE29

thread callback for sceIoChstatByFdForDriver

typedef struct sceIoChstatByFdForDriver_args
  SceUID fd;
  const SceIoStat *buf,
  unsigned int cbit;
} sceIoChstatByFdForDriver_args;

int t_sceIoChstatByFdForDriver(sceIoChstatByFdForDriver_args* args);


Version NID
3.60 0x0B54F9E0

thread callback for sceIoPreadForDriver

typedef struct sceIoPreadForDriver_args
   SceUID uid;
   void *data;
   int size;
   int dummy; //alignment
   SceOff offset;
} sceIoPreadForDriver_args;

int t_sceIoPreadForDriver(sceIoPreadForDriver_args* args);


Version NID
3.60 0xE5DEA6B7

thread callback for sceIoPwriteForDriver

typedef struct sceIoPwriteForDriver_args
   SceUID uid;
   const void *data;
   int size;
   int dummy; //alignment
   SceOff offset;
} sceIoPwriteForDriver_args;

int t_sceIoPwriteForDriver(sceIoPwriteForDriver_args* args);


Version NID
3.60 0x2DFA192F

Derived from vshIoCreateMountEvent

int sceIoCreateMountEventForDriver(int vshMountId, int flag);


Version NID
3.60 0x3C0343DB

Derived from vshIoCreateErrorEvent

typedef struct sceIoCreateErrorEventForDriverOpt
  uint32_t unk_0;
  uint32_t unk_4;
  uint32_t unk_8;
  uint32_t unk_C;

  uint32_t unk_10;
  uint32_t unk_14;
  uint32_t unk_18;
} sceIoCreateErrorEventForDriverOpt;

SceUID sceIoCreateErrorEventForDriver(int vshMountId, int flag, sceIoCreateErrorEventForDriverOpt* opt);


Version NID
3.60 0x40B933C7

Derived from vshIoClearErrorEvent

int sceIoClearErrorEventForDriver(SceUID uid);


Version NID
3.60 0x43DB0AE4

Derived from vshIoDeleteMountEvent

int sceIoDeleteMountEventForDriver(SceUID uid);


Version NID
3.60 0xC6158F8D

Derived from vshIoDeleteErrorEvent

int sceIoDeleteErrorEventForDriver(SceUID uid);


Version NID
3.60 0x39ABDB9E
int unk_39ABDB9E(int vshMountId, int num, int unk2, int unk3);


Version NID
3.60 0xCFAECF18

used by SceAppMgr

sets a callback function that does path mapping:

  • function tries to OverlayResolveSync input path
  • checks that it is not a PD path (temp mount point probably aquired by PFS)
  • takes beginning of path until symbol ":"
  • tries to do a lookup by that path copy in data segment global 0x3470C mount_point_data_entry item array
  • if item is found then path from mount_point_data_entry item is copied to result_path
  • in any other case OverlayResolveSync result path is copied to result_path
typedef int(t_1914_callback)(const char* path, SceUID pid, char* result_path, int size);

int sceIoSetPathMappingFunctionForDriver(t_1914_callback* cb);


Version World NID
3.60 non-secure 0x9C220246

calls sceSblACMgrGetPathIdForKernel internally.

may also call callback function set by sceIoSetPathMappingFunctionForDriver.

this callback function does path mapping since result in result_path is passed to sceSblACMgrGetPathIdForKernel.

int sceIoGetPathIdExForDriver(SceUID pid, const char *path, int ignored, char *pathId);


Version World NID
3.60 non-secure 0xCDF3EF52

creates instance of SceUIDVfsFileClass using sceKernelCreateUidObjForKernel

SceUID create_SceUIDVfsFileClass(int unk0, int unk1, const char *unk2);



Version NID
1.69 0xB13031
3.60 different NID or not present


Version NID
1.69 0x09CD0FC8
3.60 0x09CD0FC8


Version NID
1.69 0x0DC4F1BB
3.60 0x0DC4F1BB


Version NID
1.69 0x13DC3244
3.60 0x13DC3244


Version NID
1.69 0x14B2D56C
3.60 0x14B2D56C


Version NID
1.69 0x16512F59
3.60 0x16512F59
int sceIoSyncByFd(SceUID fd, unsigned int unk);


Version NID
1.69 0x1D2988F1
3.60 0x1D2988F1


Version NID
1.69 0x2300858E
3.60 0x2300858E


Version NID
1.69 0x27373135
3.60 0x27373135


Version NID
1.69 0x34E6A06E
3.60 different NID or not present


Version NID
1.69 0x34EFD876
3.60 0x34EFD876
int sceIoWrite(SceUID fd, const void *data, SceSize size);


Version NID
1.69 0x36CAF911
3.60 different NID or not present


Version NID
1.69 0x38FE853B
3.60 different NID or not present


Version NID
1.69 0x3E98E422
3.60 0x3E98E422


Version NID
1.69 0x3EE3F66E
3.60 0x3EE3F66E


Version NID
1.69 0x422A221A
3.60 0x422A221A
int sceIoDclose(SceUID fd);


Version NID
1.69 0x4912F748
3.60 0x4912F748
typedef struct sceIoRenameOpt
  uint32_t unk_0;
  uint32_t unk_4;
  uint32_t unk_8;
  uint32_t unk_C;
} sceIoRenameOpt;

int _sceIoRename(const char *oldname, const char *newname, sceIoRenameOpt *opt);


Version NID
1.69 0x49252B9B
3.60 0x49252B9B
int sceIoLseek32(SceUID fd, int offset, int whence);


Version NID
1.69 0x49312108
3.60 0x49312108


Version NID
1.69 0x515AC017
3.60 0x515AC017
typedef struct sceIoDevctlOpt
   uint32_t unk_0;
   uint32_t unk_4;
   uint32_t unk_8;
   uint32_t unk_C;
   uint32_t unk_10;
   uint32_t unk_14;
} sceIoDevctlOpt;

int _sceIoDevctl(const char *dev, unsigned int cmd, void *indata, sceIoDevctlOpt *args, int inlen, void *outdata, int outlen);


Version NID
1.69 0x5167AC1E
3.60 0x5167AC1E


Version NID
1.69 0x539FD5C4
3.60 0x539FD5C4
typedef struct sceIoPreadOpt
   SceOff offset;
   uint32_t unk_8;
   uint32_t unk_C;
} sceIoPreadOpt;

int _sceIoPread(SceUID uid, void *buffer, SceSize size, sceIoPreadOpt *opt);


Version NID
1.69 0x554292F0
3.60 different NID or not present


Version NID
1.69 0x58010F40
3.60 different NID or not present


Version NID
1.69 0x5DC29460
3.60 different NID or not present


Version NID
1.69 0x5DD867F7
3.60 0x5DD867F7
typedef struct sceIoSyncOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoSyncOpt;

int _sceIoSync(const char* device, unsigned int unk, sceIoSyncOpt* opt);


Version NID
1.69 0x5FFA47E2
3.60 0x5FFA47E2


Version NID
1.69 0x64B233B8
3.60 different NID or not present


Version NID
1.69 0x654E27B1
3.60 different NID or not present


Version NID
1.69 0x6F78FAFE
3.60 different NID or not present


Version NID
1.69 0x70B7BB52
3.60 different NID or not present


Version NID
1.69 0x773EBD45
3.60 0x773EBD45


Version NID
1.69 0x78955C65
3.60 0x78955C65
typedef struct sceIoRemoveOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoRemoveOpt;

int _sceIoRemove(const char *filename, sceIoRemoveOpt* opt);


Version NID
1.69 0x7E1367CB
3.60 0x7E1367CB


Version NID
1.69 0x7F2ABBAF
3.60 0x7F2ABBAF


Version NID
1.69 0x81794921
3.60 0x81794921


Version NID
1.69 0x86DB0C0E
3.60 0x86DB0C0E


Version NID
1.69 0x8713D662
3.60 0x8713D662
int _sceIoDread(SceUID fd, SceIoDirent *dir);


Version NID
1.69 0x8C319CF0
3.60 different NID or not present


Version NID
1.69 0x8E7E11F2
3.60 0x8E7E11F2
typedef struct sceIoGetstatOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoGetstatOpt;

int _sceIoGetstat(const char *name, SceIoStat *buf, sceIoGetstatOpt *opt);


Version NID
1.69 0x8EA3616A
3.60 0x8EA3616A


Version NID
1.69 0x8F1ACC32
3.60 0x8F1ACC32
typedef struct sceIoMkdirOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoMkdirOpt;

int _sceIoMkdir(const char *dirname, SceIoMode mode, sceIoMkdirOpt opt);


Version NID
1.69 0x9111D004
3.60 0x9111D004


Version NID
1.69 0x92BDA6DA
3.60 different NID or not present


Version NID
1.69 0x9654094B
3.60 0x9654094B
typedef struct sceIoPwriteOpt
   SceOff offset;
   uint32_t unk_8;
   uint32_t unk_C;
} sceIoPwriteOpt;

int _sceIoPwrite(SceUID uid, const void *data, int size, sceIoPwriteOpt *opt);


Version NID
1.69 0x9E3F880D
3.60 different NID or not present


Version NID
1.69 0xA176CD03
3.60 0xA176CD03


Version NID
1.69 0xA604764A
3.60 0xA604764A
typedef struct _sceIoLseekOpt //size is 0x10
  SceOff offset;
  int whence;
  uint32_t unk;
} _sceIoLseekOpt;

SceOff _sceIoLseek(SceUID fd, _sceIoLseekOpt* opt);


Version NID
1.69 0xA9F89275
3.60 0xA9F89275


Version NID
1.69 0xB0486482
3.60 different NID or not present


Version NID
1.69 0xB14192F0
3.60 different NID or not present


Version NID
1.69 0xB2B891E6
3.60 different NID or not present


Version NID
1.69 0xB2D0B2F4
3.60 0xB2D0B2F4


Version NID
1.69 0xB4B021D9
3.60 0xB4B021D9


Version NID
1.69 0xB9C9C9CF
3.60 0xB9C9C9CF


Version NID
1.69 0xBCF5684D
3.60 0xBCF5684D


Version NID
1.69 0xC49C312F
3.60 0xC49C312F


Version NID
1.69 0xC70B8886
3.60 0xC70B8886
int sceIoClose(SceUID fd);


Version NID
1.69 0xC92AF88F
3.60 different NID or not present


Version NID
1.69 0xCC67B6FD
3.60 0xCC67B6FD
typedef struct sceIoOpenOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoOpenOpt;

SceUID _sceIoOpen(const char *filename, int flag, SceIoMode mode, sceIoOpenOpt *opt);


Version NID
1.69 0xCEF48835
3.60 0xCEF48835


Version NID
1.69 0xD1C49D2F
3.60 0xD1C49D2F


Version NID
1.69 0xD2EE455F
3.60 0xD2EE455F
typedef struct sceIoChstatOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoChstatOpt;

int _sceIoChstat(const char *name, const SceIoStat *stat, unsigned int cbit, sceIoChstatOpt *opt);


Version NID
1.69 0xD302DCB9
3.60 different NID or not present


Version NID
1.69 0xD414C89F
3.60 0xD414C89F


Version NID
1.69 0xDC2D7D38
3.60 0xDC2D7D38


Version NID
1.69 0xE00DC256
3.60 0xE00DC256


Version NID
1.69 0xE0BE2A30
3.60 0xE0BE2A30
int _sceIoChstatByFd(SceUID fd, const SceIoStat *buf, unsigned int cbit);


Version NID
1.69 0xE0D63D2A
3.60 0xE0D63D2A


Version NID
1.69 0xE6C53567
3.60 0xE6C53567
int _sceIoGetstatByFd(SceUID fd, SceIoStat *stat);


Version NID
1.69 0xE6C923B3
3.60 different NID or not present


Version NID
1.69 0xE6E614B5
3.60 0xE6E614B5
typedef struct sceIoDopenOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoDopenOpt;

SceUID _sceIoDopen(const char *dirname, sceIoDopenOpt *opt);


Version NID
1.69 0xEF5432ED
3.60 0xEF5432ED


Version NID
1.69 0xF2A472A1
3.60 0xF2A472A1


Version NID
1.69 0xF3C9E783
3.60 different NID or not present


Version NID
1.69 0xF437545D
3.60 different NID or not present


Version NID
1.69 0xF4E13260
3.60 different NID or not present


Version NID
1.69 0xF58286C3
3.60 different NID or not present


Version NID
1.69 0xF59F37B0
3.60 0xF59F37B0


Version NID
1.69 0xF5C58B21
3.60 0xF5C58B21


Version NID
1.69 0xF5DEEA19
3.60 different NID or not present


Version NID
1.69 0xF69FB394
3.60 different NID or not present


Version NID
1.69 0xFAFF0002
3.60 different NID or not present


Version NID


Version NID
1.69 0xFDB32293
3.60 0xFDB32293
sceIoRead(SceUID fd, void *data, SceSize size);


Version NID
1.69 0xFFFB4D76
3.60 0xFFFB4D76
typedef struct sceIoRmdirOpt
  uint32_t unk_0;
  uint32_t unk_4;
} sceIoRmdirOpt;

int _sceIoRmdir(const char *dirname, sceIoRmdirOpt* opt);

Device Drivers