SceIofilemgr is the primary interface for file IO. Read File Management for more information on file IO.
Module
This module exists in 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
|
Libraries
This module is accessible by usermode.
Known NIDs
Mount Points
This table is stored in data segment of SceIofilemgr as array of mount_point_info elements
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
|
Partition Block Devices
It looks like each partition of particular device has special block device assigned to it (device file?).
Each partition is also aliased with numeric name.
Each partition also has mount point.
For example first partition of Game Card is gro0.
It has corresponding block device gcd-lp-ign-gamero (generic character device, line printer).
Mount point is /dev/gcd-lp-ign-gamero.
Numeric alias is 100.
For example second partition of Game Card is raw data.
It has corresponding block device gcd-lp-act-mediaid (generic character device, line printer).
Mount point is ?
In total there can be 16 aliases from 0 to 15. Alias 16 is hardcoded.
Aliases 0-15 correspond to eMMC.
Aliases 100-115 correspond to Game Card.
Aliases 200-215 correspond to Memory Card.
This section will be updated as soon as vfs tree will be dumped.
VFS Nodes
VFS Operations
- implemented operation is marked as
implemented
- not implemented is marked as
- return 0 placeholder is marked as
0
- return error is marked with corresponding error name
Function |
sdstor_dev_fs |
exfat |
dummy_ttyp_dev_fs |
PFS_REDIRECT_INF |
PFS_GDSD_INF |
PFS_AC_INF
|
1 |
implemented |
implemented |
implemented |
implemented |
implemented |
implemented
|
2 |
SCE_ERROR_ERRNO_EBUSY |
implemented |
0 |
implemented |
implemented |
implemented
|
3 |
implemented |
implemented |
implemented |
implemented |
implemented |
implemented
|
4 |
|
implemented |
|
|
|
|
5 |
|
|
|
|
|
|
6 |
|
|
|
|
|
|
7 |
|
implemented |
|
0 |
implemented |
implemented
|
8 |
|
|
|
|
|
|
9 |
0 |
0 |
0 |
0 |
0 |
0
|
10 |
|
0 |
0 |
0 |
0 |
0
|
11 |
|
|
|
|
|
|
12 |
implemented |
implemented |
|
implemented |
implemented |
implemented
|
13 |
implemented |
implemented |
|
implemented |
implemented |
implemented
|
VFS Node Operations
- implemented operation is marked as
implemented
- not implemented is marked as
- return 0 placeholder is marked as
0
- return error is marked with corresponding error name
Function |
sdstor_dev_fs |
exfat |
dummy_ttyp_dev_fs |
PFS_REDIRECT_INF |
PFS_GDSD_INF |
PFS_AC_INF
|
1 |
implemented |
implemented |
0 |
implemented |
implemented |
implemented
|
2 |
|
implemented |
|
implemented |
implemented |
implemented
|
3 |
implemented |
implemented |
0 |
implemented |
implemented |
implemented
|
4 |
implemented |
implemented |
implemented |
implemented |
implemented |
implemented
|
5 |
implemented |
implemented |
0 |
implemented |
implemented |
implemented
|
6 |
implemented |
implemented |
implemented |
implemented |
implemented |
implemented
|
7 |
implemented |
implemented |
0 |
implemented |
implemented |
implemented
|
8 |
|
SCE_ERROR_ERRNO_EUNSUP |
0 |
implemented |
implemented |
implemented
|
9 |
implemented |
implemented |
|
implemented |
implemented |
implemented
|
10 |
|
implemented |
|
implemented |
implemented |
implemented
|
11 |
|
implemented |
|
implemented |
implemented |
implemented
|
12 |
|
implemented |
|
implemented |
implemented |
implemented
|
13 |
|
implemented |
|
implemented |
implemented |
implemented
|
14 |
|
implemented |
|
implemented |
implemented |
implemented
|
15 |
|
implemented |
|
implemented |
implemented |
implemented
|
16 |
|
implemented |
|
implemented |
implemented |
implemented
|
17 |
|
implemented |
|
implemented |
implemented |
implemented
|
18 |
|
|
|
|
|
|
19 |
implemented |
implemented |
|
implemented |
implemented |
implemented
|
20 |
implemented |
implemented |
|
implemented |
implemented |
implemented
|
21 |
0 |
implemented |
0 |
implemented |
implemented |
implemented
|
22 |
|
implemented |
|
|
|
|
23 |
|
implemented |
|
|
|
|
24 |
0 |
implemented |
|
implemented |
implemented |
implemented
|
25 |
|
implemented |
|
implemented |
implemented |
implemented
|
26 |
|
implemented |
|
implemented |
implemented |
implemented
|
27 |
|
implemented |
|
implemented |
implemented |
implemented
|
28 |
|
implemented |
|
implemented |
implemented |
implemented
|
29 |
|
|
|
|
|
|
Typical io operation execution
This is a very brief desctiption for overall understanding of io vfs_node
operations.
Implementation of SceIofilemgr is quite solid and most of the functions are implemented in the same manner however there could be exceptions.
When io operation like sceIoLseek
is called here is what happens:
- all user space arguments are copied to kernel space, usually onto the kernel stack. all user space uids are converted to kernel space uids
- optionally control may be passed to wrapper function that also does conversion
- then control is passed to kernel level function like
sceIoLseekForDriver
- kernel level function spawns separate thread and passes all arguments in single structure
- separate thread then unpacks all arguments, finds
vfs_node
and calls exported function like vfs_node_func7
- exported function packs all arguments into single stucture and calls real callback since it has
vfs_node
with node operation table
- callback routine should be located in generic device driver, like SceSdstor, SceExfatfs or ScePfsMgr. It unpacks the arguments and then does something.
- need to figure out how call is dispatched to specific device driver. For example SceSdstor should be able to dispatch to SceSdif, SceWlanBt, SceMsif and SceUsbMass
Types
typedef struct vfs_block_dev_info //size is 0x14
{
char* vitaMount;
char* filesystem; // Some name, I guess it is filesystem
char* blockDevicePrimary;
char* blockDeviceSecondary; // can be 0
uint32_t vshMountId; //must be same as in mount_point_info
}vfs_block_dev_info;
typedef struct vfs_mount_point_info_base
{
char* unixMount;
uint32_t unk_4; //zero
uint32_t devMajor;
uint32_t devMinor;
char* filesystem;
uint32_t unk_14; //zero
vfs_block_dev_info* blockDev1;
uint32_t unk_1C; //zero
} vfs_mount_point_info_base;
typedef struct vfs_mount_point_info //size is 0x38
{
uint32_t vshMountId;
vfs_mount_point_info_base base;
vfs_block_dev_info* blockDev2; //same as blockDev1
uint32_t unk_28; //zero - except for (ux0:, gro0:, grw0:) - maybe related to device specific data?
uint32_t unk_2C; //zero
uint32_t unk_30; //zero
uint32_t unk_34; //zero
}vfs_mount_point_info;
//probably vfsops
struct node_ops1 // size is 0x34 (13 pointers)
{
int (*func1)(void* ctx);
int (*func2)(void* ctx); // ?
int (*func3)(void* ctx);
int (*func4)(void* ctx);
int (*func5)(void* ctx); // not implemented by all
int (*func6)(void* ctx); // not implemented by all
int (*func7)(void* ctx);
int (*func8)(void* ctx); // not implemented by all
int (*func9)(void* ctx); // called by sceVfsAddVfs
int (*func10)(void* ctx); // called by sceVfsDeleteVfs
int (*func11)(void* ctx); // not implemented by all
int (*func12)(void* ctx); // sceIoDevctlForDriver
int (*func13)(void* ctx); // (initialize partition entry in table)(map block device name on numeric name)
};
//probably vnodeops
struct node_ops2 // size is 0x74 (29 pointers)
{
int (*func1)(void* ctx); // sceIoOpenForDriver (this function creates device handle) (It operates with normal block device name and unix mount)
int (*func2)(void* ctx); // sceIoOpenForDriver (another one ?)
int (*func3)(void* ctx); // sceIoOpenForDriver (another one ?) or sceIoCloseForDriver
int (*func4)(void* ctx); // add partition (add vfsNode) (initialize partition entry in table) (for example happens on card insert exclusively) (operates with numeric names)
int (*func5)(void* ctx); // sceIoReadForDriver
int (*func6)(void* ctx); // sceIoWriteForDriver
int (*func7)(void* ctx); // sceIoLseekForDriver or sceIoLseek32?
int (*func8)(void* ctx); // sceIoIoctlForDriver
int (*func9)(void* ctx); // remove partition (remove vfsNode) (deinitialize partition entry in table) (for example happens on card remove exclusively) (operates with numeric names)
int (*func10)(void* ctx); // sceIoMkdirForDriver
int (*func11)(void* ctx); // sceIoRmdirForDriver
int (*func12)(void* ctx); // sceIoDopenForDriver
int (*func13)(void* ctx); // sceIoDcloseForDriver
int (*func14)(void* ctx); // sceIoDreadForDriver
int (*func15)(void* ctx); // sceIoGetstatForDriver or sceIoGetstatByFdForDriver
int (*func16)(void* ctx); // sceIoChstatForDriver or sceIoChstatByFdForDriver
int (*func17)(void* ctx); // sceIoRenameForDriver
int (*func18)(void* ctx); // not implemented by all
int (*func19)(void* ctx); // sceIoPreadForDriver
int (*func20)(void* ctx); // sceIoPwriteForDriver
int (*func21)(void* ctx); // ?
int (*func22)(void* ctx); // not referenced
int (*func23)(void* ctx); // not referenced
int (*func24)(void* ctx); // sceIoSyncForDriver or sceIoSyncByFdForDriver
int (*func25)(void* ctx); // sceIoGetstatByFdForDriver
int (*func26)(void* ctx); // sceIoChstatByFdForDriver
int (*func27)(void* ctx); // ?
int (*func28)(void* ctx); // ?
int (*func29)(void* ctx); // not implemented by all
};
struct vfs_add_data
{
node_ops1* funcs1;
const char *name; //max size is 0x20
int flags; //0x0E
int unk_C; //0x01 / 0x00 (root, leaf ?)
int unk_10; //0x10
node_ops2* funcs2;
int unk_18; //0x00
vfs_add_data* next_element; //ptr to next element, confirmed
};
//this structure contains device specific data
//this definition applies only to SceSdif driver
//it is yet unknown what data is stored by SceExfatfs, ScePfsMgr and SceIofilemgr implementations
struct vfs_device_info //size is 0xC
{
partition_entry* partition;
sd_stor_device* device;
uint32_t unk_8;
};
struct vfs_node
{
uint8_t data1[0x40];
node_ops2 *ops;
uint32_t unk_44;
vfs_device_info* unk_48; //allocated on heap with uid from uid field
uint32_t unk_4C;
vfs_node* prev_node;
uint32_t unk_54;
uint32_t unk_58;
uint32_t unk_5C;
uint32_t unk_60;
uint32_t unk_64;
uint32_t unk_68;
SceUID uid;
uint8_t data2[0x60];
uint32_t unk_D0;
}vfs_node;
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* unk_2C; //can be zero
vfs_node_info* unk_30; //can be zero
vfs_node_info* unk_34; //can be zero
}vfs_node_info;
Data segment layout
Address |
Size |
Description
|
0x0000 |
0x01A8 |
unknown
|
0x01A8 |
0x1500 |
array of 96 elements of vfs_node_info
|
0x16A8 |
0x4 |
SceVfsRfsLock fast mutex
|
0x16AC |
0x1A4 |
unknown
|
0x1850 |
0x4 |
SceIofileDaemonLock fast mutex
|
0x1854 |
0x40 |
unknown
|
0x1894 |
0x4 |
SceIofile fast mutex
|
0x1898 |
0x80 |
unknown
|
0x1918 |
0x4 |
SceIofileFlock fast mutex
|
0x191C |
0x74 |
unknown
|
0x1990 |
0x4 |
SceVfsMntlistLock fast mutex
|
0x1994 |
0x6C |
unknown
|
0x1A00 |
0x4 |
SceVfsNcacheLock fast mutex
|
0x1A04 |
0x48 |
unknown
|
0x1A4C |
0x4 |
SceVfsLock fast mutex
|
0x1A50 |
0x40 |
unknown
|
0x1A90 |
0x700 |
array of 32 elements of vfs_mount_point_info
|
0x2190 |
0x10 |
unknown
|
0x21A0 |
0x40 |
unknown
|
0x21E0 |
0x3C |
unknown
|
0x221C |
0x20 |
vfs_add_data dummy_ttyp_dev_fs node
|
SceIofilemgrForDriver
sceVfsUnmount
Version
|
NID
|
1.69
|
0x9C7E7B76
|
3.60
|
0x9C7E7B76
|
struct vfs_unmount_data
{
const char *mountpoint;
int flags;
};
int sceVfsUnmount(struct vfs_unmount_data *data);
sceVfsDeleteVfs
Version
|
NID
|
1.69
|
0x9CBFA725
|
3.60
|
0x9CBFA725
|
int sceVfsDeleteVfs(const char *name, void **deleted_node);
sceVfsAddVfs
Version
|
NID
|
1.69
|
0x673D2FCD
|
3.60
|
0x673D2FCD
|
int sceVfsAddVfs(struct vfs_add_data *data);
sceVfsMount
Version
|
NID
|
1.69
|
0xB62DE9A6
|
3.60
|
0xB62DE9A6
|
int sceVfsMount(struct vfs_mount_point_info_base* data);
sceVfsGetNewNode
Version
|
NID
|
1.69
|
0xD60B5C63
|
3.60
|
0xD60B5C63
|
int sceVfsGetNewNode(vfs_node* cur_node, node_ops2 *ops, int unused, vfs_node **node);
sceIoDreadForDriver
Version
|
NID
|
1.69
|
0x20CF5FC7
|
3.60
|
0x20CF5FC7
|
Call interface is same as sceIoDread
sceIoWriteForDriver
Version
|
NID
|
1.69
|
0x21EE91F0
|
3.60
|
0x21EE91F0
|
Call interface is same as sceIoWrite
sceIoDopenForDriver
Version
|
NID
|
1.69
|
0x463B25CC
|
3.60
|
0x463B25CC
|
Call interface is same as sceIoDopen
sceIoLseekForDriver
Version
|
NID
|
1.69
|
0x62090481
|
3.60
|
0x62090481
|
Call interface is same as sceIoLseek
sceIoOpenForDriver
Version
|
NID
|
1.69
|
0x75192972
|
3.60
|
0x75192972
|
Call interface is same as sceIoOpen
sceIoChstatForDriver
Version
|
NID
|
1.69
|
0x7D42B8DC
|
3.60
|
0x7D42B8DC
|
Call interface is same as sceIoChstat
sceIoGetstatForDriver
Version
|
NID
|
1.69
|
0x75C96D25
|
3.60
|
0x75C96D25
|
Call interface is same as sceIoGetstat
sceIoMkdirForDriver
Version
|
NID
|
1.69
|
0x7F710B25
|
3.60
|
0x7F710B25
|
Call interface is same as sceIoMkdir
sceIoReadForDriver
Version
|
NID
|
1.69
|
0xE17EFC03
|
3.60
|
0xE17EFC03
|
Call interface is same as sceIoRead
sceIoCloseForDriver
Version
|
NID
|
1.69
|
0xF99DD8A3
|
3.60
|
0xF99DD8A3
|
Call interface is same as sceIoClose
sceIoRenameForDriver
Version
|
NID
|
1.69
|
0xDC0C4997
|
3.60
|
0xDC0C4997
|
Call interface is same as sceIoRename
sceIoRemoveForDriver
Version
|
NID
|
1.69
|
0x0D7BB3E1
|
3.60
|
0x0D7BB3E1
|
Call interface is same as sceIoRemove
sceIoCancelForDriver
Version
|
NID
|
3.60
|
0x6D59658D
|
Derived from sceIoCancel
sceIoChstatAsyncForDriver
Version
|
NID
|
3.60
|
0x7EC442BF
|
Derived from _sceIoChstatAsync
sceIoChstatByFdAsyncForDriver
Version
|
NID
|
3.60
|
0xEC974400
|
Derived from sceIoChstatByFdAsync
sceIoChstatByFdForDriver
Version
|
NID
|
3.60
|
0xDF57A75F
|
Derived from _sceIoChstatByFd
sceIoCloseAsyncForDriver
Version
|
NID
|
3.60
|
0x11C57CC6
|
Derived from sceIoCloseAsync
sceIoDevctlAsyncForDriver
Version
|
NID
|
3.60
|
0xA9302946
|
Derived from _sceIoDevctlAsync
sceIoDevctlForDriver
Version
|
NID
|
3.60
|
0x16882FC4
|
Derived from _sceIoDevctl
sceIoDcloseForDriver
Version
|
NID
|
3.60
|
0x19C81DD6
|
Derived from sceIoDclose
sceIoFlockForDriver
Version
|
NID
|
3.60
|
0x16336A0D
|
Derived from sceIoFlockForSystem
sceIoGetstatByFdAsyncForDriver
Version
|
NID
|
3.60
|
0x0FEE1238
|
Derived from sceIoGetstatByFdAsync
sceIoGetstatByFdForDriver
Version
|
NID
|
3.60
|
0x462F059B
|
Derived from _sceIoGetstatByFd
sceIoGetstatAsyncForDriver
Version
|
NID
|
3.60
|
0x94A5304A
|
Derived from _sceIoGetstatAsync
sceIoIoctlAsyncForDriver
Version
|
NID
|
3.60
|
0xB761E91B
|
Derived from _sceIoIoctlAsync
sceIoIoctlForDriver
Version
|
NID
|
3.60
|
0x161CD33F
|
Derived from _sceIoIoctl
sceIoLseekAsyncForDriver
Version
|
NID
|
3.60
|
0x541BAABD
|
Derived from _sceIoLseekAsync
sceIoMkdirAsyncForDriver
Version
|
NID
|
3.60
|
0x27003443
|
Derived from _sceIoMkdirAsync
sceIoOpenAsyncForDriver
Version
|
NID
|
3.60
|
0x451001DE
|
Derived from _sceIoOpenAsync
sceIoPreadAsyncForDriver
Version
|
NID
|
3.60
|
0x64A46A2C
|
Derived from _sceIoPreadAsync
sceIoPreadForDriver
Version
|
NID
|
3.60
|
0x2A17515D
|
Derived from _sceIoPread
sceIoPwriteAsyncForDriver
Version
|
NID
|
3.60
|
0x202CDDE3
|
Derived from _sceIoPwriteAsync
sceIoPwriteForDriver
Version
|
NID
|
3.60
|
0x5F1512C8
|
Derived from _sceIoPwrite
sceIoReadAsyncForDriver
Version
|
NID
|
3.60
|
0x69047C81
|
Derived from sceIoReadAsync
sceIoRemoveAsyncForDriver
Version
|
NID
|
3.60
|
0xF9D6507D
|
Derived from _sceIoRemoveAsync
sceIoRenameAsyncForDriver
Version
|
NID
|
3.60
|
0xAACBC47A
|
Derived from _sceIoRenameAsync
sceIoRmdirAsyncForDriver
Version
|
NID
|
3.60
|
0xF5B0B36C
|
Derived from _sceIoRmdirAsync
sceIoRmdirForDriver
Version
|
NID
|
3.60
|
0x1CC9C634
|
Derived from _sceIoRmdir
sceIoSyncByFdAsyncForDriver
Version
|
NID
|
3.60
|
0x041209CF
|
Derived from sceIoSyncByFdAsync
sceIoSyncByFdForDriver
Version
|
NID
|
3.60
|
0x43170575
|
Derived from sceIoSyncByFd
sceIoSyncAsyncForDriver
Version
|
NID
|
3.60
|
0x4F9EA8B0
|
Derived from _sceIoSyncAsync
sceIoSyncForDriver
Version
|
NID
|
3.60
|
0xDDF78594
|
Derived from _sceIoSync
sceIoWriteAsyncForDriver
Version
|
NID
|
3.60
|
0xA1BD13D0
|
Derived from sceIoWriteAsync
SceIofilemgrForDriver vfs callbacks
Vfs callbacks are harder to reverse since it looks like not all of them are exported. Looks like some of them are not even exposed as subroutines.
Here will go an attempt to desctibe interface of actual callbacks with single ctx argument (as opposed to exported functions that pack arguments into ctx)
vfs_func1
typedef struct vf1_field0
{
uint32_t unk_0;
uint32_t unk_4;
uint32_t unk_8;
uint32_t unk_C;
uint8_t data1[0x30];
uint32_t unk_40;
SceUID mempool; //SceSdStorVfs mempool uid
uint32_t unk_48;
uint32_t unk_4C;
uint32_t unk_50;
uint32_t unk_54;
uint32_t unk_58;
uint32_t unk_5C;
uint32_t unk_60;
uint32_t unk_64;
uint32_t unk_68; //0x14
uint32_t unk_6C;
uint32_t unk_70;
uint32_t unk_74;
uint32_t unk_78;
void* unk_7C;
uint8_t data2[0x40];
uint32_t unk_C0; //0x200
void* unk_C4; //pointer to structure of size 0x230 at least
//more fields?
}vf1_field0;
typedef struct vfs_func1_args
{
vf1_field0* result;
//more fields?
}vfs_func1_args;
int vfs_func1(vfs_func1_args* ctx)
vfs_func2
typedef struct vfs_func2_args
{
//fields are yet unknown
}vfs_func2_args;
int vfs_func2(vfs_func2_args* ctx)
vfs_func3
typedef struct vf3_field2
{
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;
uint32_t unk_1C;
uint32_t unk_20;
uint32_t unk_24;
uint32_t unk_28;
uint32_t unk_2C;
uint32_t unk_30;
uint32_t unk_34;
uint32_t unk_38;
uint32_t unk_3C;
uint32_t unk_40;
uint32_t unk_44;
uint32_t unk_48;
uint32_t unk_4C;
uint32_t unk_50; // 0
uint32_t unk_54;
uint32_t unk_58;
uint32_t unk_5C;
uint32_t unk_60;
uint32_t unk_64;
uint32_t unk_68;
uint32_t unk_6C;
uint32_t unk_70;
uint32_t unk_74; // 1
uint32_t unk_78; // 1
uint32_t unk_7C;
uint32_t unk_80; //0x80
uint32_t unk_84;
uint32_t unk_88; //0x80
//more fields ?
}vf3_field2;
typedef struct vfs_func3_args
{
uint32_t unk_0;
uint32_t unk_4;
vf3_field2* arg2;
//more fields ?
}vfs_func3_args;
int vfs_func3(vfs_func3_args* ctx)
vfs_func4
typedef struct vfs_func4_args
{
//fields are yet unknown
}vfs_func4_args;
int vfs_func4(vfs_func4_args* ctx)
vfs_func7
typedef struct vfs_func7_args
{
//fields are yet unknown
}vfs_func7_args;
int vfs_func7(vfs_func7_args* ctx)
vfs_func9
typedef struct vfs_func9_args
{
//fields are yet unknown
}vfs_func9_args;
int vfs_func9(vfs_func9_args* ctx)
vfs_func10
typedef struct vfs_func10_args
{
//fields are yet unknown
}vfs_func10_args;
int vfs_func10(vfs_func10_args* ctx)
vfs_func12
typedef struct vfs_func12_args
{
uint32_t unk_0;
uint32_t unk_4;
uint32_t unk_8; // some switch number
char* name;
uint32_t nameLength;
uint32_t unk_14;
uint32_t unk_18;
//more fields ?
}vfs_func12_args;
int vfs_func12(vfs_func12_args* ctx)
vfs_func13
typedef struct vfs_func13_args
{
uint32_t unk_0;
char* blockDeviceName;
uint32_t unk_8;
uint32_t unk_C;
char* numericName;
uint32_t blockDeviceNameLength;
uint32_t* numericNameLength;
}vfs_func13_args;
int vfs_func13(vfs_func13_args* ctx)
SceIofilemgrForDriver vfs node callbacks
It looks like vfs callbacks are exported. Callbacks can be identified using these steps:
- Find all functions that contain indirect calls
- Locate only calls that use address, taken from table, that is pointed by vfs_node (offset 0x40, then valid offset inside pointer table)
- Trace back to first exported function (usually this is single export, not far away in call stack)
- Turns out ScePfsMgr and SceExfatfs use these exports from their vfs node function callbacks, so this information can be mapped/matched.
vfs_node_func1
Version |
NID
|
3.60 |
0x76B79BEC
|
int vfs_node_func1(vfs_node *node, vnf1_arg1* dev, int unk2, int unk3)
struct vnf1_arg1
{
char* blockDevice;
uint32_t nameLength;
char* unixMount;
}vnf1_arg1;
//this type applies only to SceSdif
struct vnf1_arg3
{
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;
uint32_t unk_1C;
sd_stor_device_handle* handle;
//not sure about size, can be more fields ?
}vnf1_arg3;
struct vfs_node_func1_args
{
vfs_node* node;
vnf1_arg1* arg1; //ignored (applies to SceSdif)
uint32_t arg2;
vnf1_arg3* arg3; //result (applies to SceSdif)
}vfs_node_func1_args;
arguments are packed into vfs_node_func1_args
and passed to vfs_node_func1
callback
vfs_node_func2
Version |
NID
|
3.60 |
0x9E347C7D
|
int vfs_node_func2(vfs_node *node, int unk1, int unk2, int unk3, int arg_0)
struct vfs_node_func2_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
uint32_t arg3;
uint32_t arg_0;
}vfs_node_func2_args;
arguments are packed into vfs_node_func2_args
and passed to vfs_node_func2
callback
vfs_node_func3
Version |
NID
|
3.60 |
0x40944C2E
|
int vfs_node_func3(vfs_node *node, int unk1)
struct vfs_node_func3_args
{
vfs_node* node;
uint32_t arg1;
}vfs_node_func3_args;
arguments are packed into vfs_node_func3_args
and passed to vfs_node_func3
callback
vfs_node_func4
Version |
NID
|
3.60 |
0xA5A6A55C
|
int vfs_node_func4(vfs_node *node, vfs_node** new_node, vnf4_arg2* dev, int unk3)
struct vnf4_arg2
{
char* blockDeviceName;
int nameLength;
} vnf4_arg2;
struct vfs_node_func4_args
{
vfs_node* node;
vfs_node** new_node; //result
vnf4_arg2* dev;
uint32_t arg3; //ignored (applies to SceSdif)
}vfs_node_func4_args;
arguments are packed into vfs_node_func4_args
and passed to vfs_node_func4
callback
vfs_node_func5_or_19
Version |
NID
|
3.60 |
0x570388A5
|
int vfs_node_func5_or_19(vfs_node *n0, int unk1, int unk2, int unk3, int arg_0)
vfs_node_func5_or_19
Version |
NID
|
3.60 |
0xABBC80E3
|
int vfs_node_func5_or_19(vfs_node *n0, int unk1, int unk2, int unk3, int arg_0, int arg_4, int arg_8)
vfs_node_func6_or_20
Version |
NID
|
3.60 |
0x9A68378D
|
int vfs_node_func6_or_20(vfs_node *n0, int unk1, int unk2, int unk3, int arg_0)
vfs_node_func6_or_20
Version |
NID
|
3.60 |
0xA53C040D
|
int vfs_node_func6_or_20(vfs_node *n0, int unk1, int unk2, int unk3, int arg_0, int arg_4, int arg_8)
vfs_node_func7
Version |
NID
|
3.60 |
0xB2B13818
|
int vfs_node_func7(vfs_node *node, vnf7_arg1* unk1, int unk2, int unk3, int arg_0)
struct vnf7_arg1
{
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;
uint32_t unk_1C;
void* unk_20; // pointer to structure. most likely device specific that has fast_mutex as first field
} vnf7_arg1;
struct vfs_node_func7_args
{
vfs_node* node;
vnf7_arg1* arg1; //some structure
uint32_t arg2; //most likely offset
uint32_t arg3;
uint32_t arg_0; //most likely whence
}vfs_node_func7_args;
arguments are packed into vfs_node_func7_args
and passed to vfs_node_func7
callback
vfs_node_func8
Version |
NID
|
3.60 |
0x333C904D
|
int vfs_node_func8(vfs_node *node, int unk0, int unk1, int unk2, int arg_0, int arg_4, int arg_8)
struct vfs_node_func8_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
uint32_t arg3;
uint32_t arg_0;
uint32_t arg_4;
uint32_t arg_8;
}vfs_node_func8_args;
arguments are packed into vfs_node_func8_args
and passed to vfs_node_func8
callback
vfs_node_func9
Version |
NID
|
3.60 |
0xDC1E7EE4
|
int vfs_node_func9(vfs_node *node0, vfs_node *node1, void *ctx, int unk)
need to confirm this type with dump
typedef struct vnf9_arg2 //most likely this type is also vfs_node (same partial layout of fields)
{
char* blockDeviceName;
int nameLength;
uint32_t unk_8;
uint32_t unk_C;
uint32_t unk_10;
uint32_t unk_14;
uint32_t unk_18;
uint32_t unk_1C;
uint32_t unk_20;
uint32_t unk_24;
uint32_t unk_28;
uint32_t unk_2C;
uint32_t unk_30;
uint32_t unk_34;
uint32_t unk_38;
uint32_t unk_3C;
uint32_t unk_40;
uint32_t unk_44;
partition_entry** unk_48;
}vnf9_arg2;
struct vfs_node_func9_args
{
vfs_node* node0;
vfs_node* node1;
vnf9_arg2* arg2;
uint32_t arg3; //ignored (applies to SceSdif)
}vfs_node_func9_args;
arguments are packed into vfs_node_func9_args
and passed to vfs_node_func9
callback
vfs_node_func10
Version |
NID
|
3.60 |
0x2F3F8C70
|
int vfs_node_func10(vfs_node *node, int unk1, int unk2, int unk3)
struct vfs_node_func10_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
uint32_t arg3;
}vfs_node_func10_args;
arguments are packed into vfs_node_func10_args
and passed to vfs_node_func10
callback
vfs_node_func11
Version |
NID
|
3.60 |
0x1D551105
|
int vfs_node_func11(vfs_node *node, int unk1, int unk2, int unused)
struct vfs_node_func11_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
}vfs_node_func11_args;
arguments are packed into vfs_node_func11_args
and passed to vfs_node_func11
callback
vfs_node_func12
Version |
NID
|
3.60 |
0x00C9C2DD
|
int vfs_node_func12(vfs_node *node, int unk1, int unk2)
struct vfs_node_func12_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
}vfs_node_func12_args;
arguments are packed into vfs_node_func12_args
and passed to vfs_node_func12
callback
vfs_node_func13
Version |
NID
|
3.60 |
0x1350F5C7
|
int vfs_node_func13(vfs_node *node, int unk1)
struct vfs_node_func13_args
{
vfs_node* node;
uint32_t arg1;
}vfs_node_func13_args;
arguments are packed into vfs_node_func13_args
and passed to vfs_node_func13
callback
vfs_node_func14
Version |
NID
|
3.60 |
0x77584C8F
|
int vfs_node_func14(vfs_node *node, int unk1, int unk2)
struct vfs_node_func14_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
}vfs_node_func14_args;
arguments are packed into vfs_node_func14_args
and passed to vfs_node_func14
callback
vfs_node_func15
Version |
NID
|
3.60 |
0x50A63ACF
|
int vfs_node_func15(vfs_node *node, int unk1, int unk2)
struct vfs_node_func15_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
}vfs_node_func15_args;
arguments are packed into vfs_node_func15_args
and passed to vfs_node_func15
callback
vfs_node_func16
Version |
NID
|
3.60 |
0x1974FA92
|
int vfs_node_func16(vfs_node *node, int unk1, int unk2, int unk3)
struct vfs_node_func16_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
uint32_t arg3;
}vfs_node_func16_args;
arguments are packed into vfs_node_func16_args
and passed to vfs_node_func16
callback
vfs_node_func17
Version |
NID
|
3.60 |
0x36A794C7
|
int vfs_node_func17(vfs_node *node, int unk1, int unk2, int unk3, int arg_0, int arg_4)
struct vfs_node_func17_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
uint32_t arg3;
uint32_t arg_0;
uint32_t arg_4;
}vfs_node_func17_args;
arguments are packed into vfs_node_func17_args
and passed to vfs_node_func17
callback
vfs_node_func21
Version |
NID
|
3.60 |
0x8FB94521
|
int vfs_node_func21(vfs_node *node)
struct vfs_node_func21_args
{
vfs_node* node;
}vfs_node_func21_args;
arguments are packed into vfs_node_func21_args
and passed to vfs_node_func21
callback
vfs_node_func22
Version |
NID
|
3.60 |
0x942AA61F
|
int vfs_node_func22(vfs_node *node, int unk1)
struct vfs_node_func22_args
{
vfs_node* node;
uint32_t arg1;
}vfs_node_func22_args;
arguments are packed into vfs_node_func22_args
and passed to vfs_node_func22
callback
vfs_node_func23
Version |
NID
|
3.60 |
0x0D8A806E
|
int vfs_node_func23(vfs_node *node, int unk1)
struct vfs_node_func23_args
{
vfs_node* node;
uint32_t arg1;
}vfs_node_func23_args;
arguments are packed into vfs_node_func23_args
and passed to vfs_node_func23
callback
vfs_node_func24
Version |
NID
|
3.60 |
0x9CD96406
|
int vfs_node_func24(vfs_node *node, int unk1, int unk2)
struct vfs_node_func24_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
}vfs_node_func24_args;
arguments are packed into vfs_node_func24_args
and passed to vfs_node_func24
callback
vfs_node_func25
Version |
NID
|
3.60 |
0x1DBCBB01
|
int vfs_node_func25(vfs_node *node, int unk1, int unk2)
struct vfs_node_func25_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
}vfs_node_func25_args;
arguments are packed into vfs_node_func25_args
and passed to vfs_node_func25
callback
vfs_node_func26
Version |
NID
|
3.60 |
0x082AFD7F
|
int vfs_node_func26(vfs_node *node, int unk1, int unk2, int unk3)
struct vfs_node_func26_args
{
vfs_node* node;
uint32_t arg1;
uint32_t arg2;
uint32_t arg3;
}vfs_node_func26_args;
arguments are packed into vfs_node_func26_args
and passed to vfs_node_func26
callback
vfs_node_func27
Version |
NID
|
3.60 |
0xF53399BC
|
int vfs_node_func27(int unk0, vfs_node *node, int unk2, int unk3)
struct vfs_node_func27_args
{
uint32_t arg0;
vfs_node* node;
uint32_t arg2;
uint32_t arg3;
uint32_t unk_10; // zero
uint32_t unk_14; // zero
}vfs_node_func27_args;
arguments are packed into vfs_node_func27_args
and passed to vfs_node_func27
callback
vfs_node_func28
Version |
NID
|
3.60 |
0x0F7E1718
|
int vfs_node_func28(vfs_node *node, int unk1, int unused1, int unused2)
struct vfs_node_func28_args
{
vfs_node* node;
uint32_t arg1;
uint32_t unk_8; // zero
uint32_t unk_C; // zero
}vfs_node_func28_args;
arguments are packed into vfs_node_func28_args
and passed to vfs_node_func28
callback
vfs_node_func29
Version |
NID
|
3.60 |
0xEEAE8B51
|
int vfs_node_func29(vfs_node *node, int unused, int unk2, int unk3, int arg_0, int arg_4, int arg_8, int arg_C)
struct vfs_node_func29_args
{
uint32_t unk_0;
uint32_t unk_4;
uint32_t arg2;
uint32_t arg3;
uint32_t arg_0;
uint32_t arg_4;
uint32_t arg_8;
uint32_t arg_C;
}vfs_node_func29_args;
arguments are packed into vfs_node_func29_args
and passed to vfs_node_func29
callback
SceIofilemgr
_sceIoDcloseAsync
Version |
NID
|
1.69 |
0xB13031
|
3.60 |
different NID or not present
|
_sceIoOpenAsync
Version |
NID
|
1.69 |
0x9CD0FC8
|
3.60 |
0x9CD0FC8
|
sceIoGetProcessDefaultPriority
Version |
NID
|
1.69 |
0xDC4F1BB
|
3.60 |
0xDC4F1BB
|
_sceIoRmdirAsync
Version |
NID
|
1.69 |
0x13DC3244
|
3.60 |
0x13DC3244
|
sceIoSetPriority
Version |
NID
|
1.69 |
0x14B2D56C
|
3.60 |
0x14B2D56C
|
sceIoSyncByFd
Version |
NID
|
1.69 |
0x16512F59
|
3.60 |
0x16512F59
|
_sceIoIoctl
Version |
NID
|
1.69 |
0x1D2988F1
|
3.60 |
0x1D2988F1
|
_sceIoLseekAsync
Version |
NID
|
1.69 |
0x2300858E
|
3.60 |
0x2300858E
|
sceIoSetPriorityForSystem
Version |
NID
|
1.69 |
0x27373135
|
3.60 |
0x27373135
|
_sceIoComplete
Version |
NID
|
1.69 |
0x34E6A06E
|
3.60 |
different NID or not present
|
sceIoWrite
Version |
NID
|
1.69 |
0x34EFD876
|
3.60 |
0x34EFD876
|
_sceIoGetThreadDefaultPriorityForSystem
Version |
NID
|
1.69 |
0x36CAF911
|
3.60 |
different NID or not present
|
_sceIoSetThreadDefaultPriorityForSystem
Version |
NID
|
1.69 |
0x38FE853B
|
3.60 |
different NID or not present
|
sceIoFlockForSystem
Version |
NID
|
1.69 |
0x3E98E422
|
3.60 |
0x3E98E422
|
_sceIoDevctlAsync
Version |
NID
|
1.69 |
0x3EE3F66E
|
3.60 |
0x3EE3F66E
|
sceIoDclose
Version |
NID
|
1.69 |
0x422A221A
|
3.60 |
0x422A221A
|
_sceIoRename
Version |
NID
|
1.69 |
0x4912F748
|
3.60 |
0x4912F748
|
sceIoLseek32
Version |
NID
|
1.69 |
0x49252B9B
|
3.60 |
0x49252B9B
|
sceIoSetThreadDefaultPriority
Version |
NID
|
1.69 |
0x49312108
|
3.60 |
0x49312108
|
_sceIoDevctl
Version |
NID
|
1.69 |
0x515AC017
|
3.60 |
0x515AC017
|
sceIoGetstatByFdAsync
Version |
NID
|
1.69 |
0x5167AC1E
|
3.60 |
0x5167AC1E
|
_sceIoPread
Version |
NID
|
1.69 |
0x539FD5C4
|
3.60 |
0x539FD5C4
|
_sceIoGetstatByFdAsync
Version |
NID
|
1.69 |
0x554292F0
|
3.60 |
different NID or not present
|
_sceIoChstatByFdAsync
Version |
NID
|
1.69 |
0x58010F40
|
3.60 |
different NID or not present
|
_sceIoGetThreadDefaultPriority
Version |
NID
|
1.69 |
0x5DC29460
|
3.60 |
different NID or not present
|
_sceIoSync
Version |
NID
|
1.69 |
0x5DD867F7
|
3.60 |
0x5DD867F7
|
_sceIoRemoveAsync
Version |
NID
|
1.69 |
0x5FFA47E2
|
3.60 |
0x5FFA47E2
|
_sceIoDreadAsync
Version |
NID
|
1.69 |
0x64B233B8
|
3.60 |
different NID or not present
|
_sceIoSetThreadDefaultPriority
Version |
NID
|
1.69 |
0x654E27B1
|
3.60 |
different NID or not present
|
_sceIoSyncByFdAsync
Version |
NID
|
1.69 |
0x6F78FAFE
|
3.60 |
different NID or not present
|
_sceIoGetPriorityForSystem
Version |
NID
|
1.69 |
0x70B7BB52
|
3.60 |
different NID or not present
|
sceIoReadAsync
Version |
NID
|
1.69 |
0x773EBD45
|
3.60 |
0x773EBD45
|
_sceIoRemove
Version |
NID
|
1.69 |
0x78955C65
|
3.60 |
0x78955C65
|
sceIoSyncByFdAsync
Version |
NID
|
1.69 |
0x7E1367CB
|
3.60 |
0x7E1367CB
|
sceIoSetProcessDefaultPriority
Version |
NID
|
1.69 |
0x7F2ABBAF
|
3.60 |
0x7F2ABBAF
|
_sceIoRenameAsync
Version |
NID
|
1.69 |
0x81794921
|
3.60 |
0x81794921
|
_sceIoSyncAsync
Version |
NID
|
1.69 |
0x86DB0C0E
|
3.60 |
0x86DB0C0E
|
_sceIoDread
Version |
NID
|
1.69 |
0x8713D662
|
3.60 |
0x8713D662
|
_sceIoWrite
Version |
NID
|
1.69 |
0x8C319CF0
|
3.60 |
different NID or not present
|
_sceIoGetstat
Version |
NID
|
1.69 |
0x8E7E11F2
|
3.60 |
0x8E7E11F2
|
sceIoCloseAsync
Version |
NID
|
1.69 |
0x8EA3616A
|
3.60 |
0x8EA3616A
|
_sceIoMkdir
Version |
NID
|
1.69 |
0x8F1ACC32
|
3.60 |
0x8F1ACC32
|
_sceIoCompleteMultiple
Version |
NID
|
1.69 |
0x9111D004
|
3.60 |
0x9111D004
|
_sceIoLseek32
Version |
NID
|
1.69 |
0x92BDA6DA
|
3.60 |
different NID or not present
|
_sceIoPwrite
Version |
NID
|
1.69 |
0x9654094B
|
3.60 |
0x9654094B
|
_sceIoGetPriority
Version |
NID
|
1.69 |
0x9E3F880D
|
3.60 |
different NID or not present
|
sceIoGetThreadDefaultPriority
Version |
NID
|
1.69 |
0xA176CD03
|
3.60 |
0xA176CD03
|
_sceIoLseek
Version |
NID
|
1.69 |
0xA604764A
|
3.60 |
0xA604764A
|
sceIoChstatByFdAsync
Version |
NID
|
1.69 |
0xA9F89275
|
3.60 |
0xA9F89275
|
_sceIoGetProcessDefaultPriority
Version |
NID
|
1.69 |
0xB0486482
|
3.60 |
different NID or not present
|
_sceIoSetPriority
Version |
NID
|
1.69 |
0xB14192F0
|
3.60 |
different NID or not present
|
_sceIoReadAsync
Version |
NID
|
1.69 |
0xB2B891E6
|
3.60 |
different NID or not present
|
_sceIoPwriteAsync
Version |
NID
|
1.69 |
0xB2D0B2F4
|
3.60 |
0xB2D0B2F4
|
_sceIoChstatAsync
Version |
NID
|
1.69 |
0xB4B021D9
|
3.60 |
0xB4B021D9
|
sceIoSetThreadDefaultPriorityForSystem
Version |
NID
|
1.69 |
0xB9C9C9CF
|
3.60 |
0xB9C9C9CF
|
_sceIoPreadAsync
Version |
NID
|
1.69 |
0xBCF5684D
|
3.60 |
0xBCF5684D
|
sceIoDopenAsync
Version |
NID
|
1.69 |
0xC49C312F
|
3.60 |
0xC49C312F
|
sceIoClose
Version |
NID
|
1.69 |
0xC70B8886
|
3.60 |
0xC70B8886
|
_sceIoWriteAsync
Version |
NID
|
1.69 |
0xC92AF88F
|
3.60 |
different NID or not present
|
_sceIoOpen
Version |
NID
|
1.69 |
0xCC67B6FD
|
3.60 |
0xCC67B6FD
|
sceIoCancel
Version |
NID
|
1.69 |
0xCEF48835
|
3.60 |
0xCEF48835
|
sceIoComplete
Version |
NID
|
1.69 |
0xD1C49D2F
|
3.60 |
0xD1C49D2F
|
_sceIoChstat
Version |
NID
|
1.69 |
0xD2EE455F
|
3.60 |
0xD2EE455F
|
_sceIoSetProcessDefaultPriority
Version |
NID
|
1.69 |
0xD302DCB9
|
3.60 |
different NID or not present
|
_sceIoGetstatAsync
Version |
NID
|
1.69 |
0xD414C89F
|
3.60 |
0xD414C89F
|
sceIoDcloseAsync
Version |
NID
|
1.69 |
0xDC2D7D38
|
3.60 |
0xDC2D7D38
|
_sceIoIoctlAsync
Version |
NID
|
1.69 |
0xE00DC256
|
3.60 |
0xE00DC256
|
_sceIoChstatByFd
Version |
NID
|
1.69 |
0xE0BE2A30
|
3.60 |
0xE0BE2A30
|
sceIoWriteAsync
Version |
NID
|
1.69 |
0xE0D63D2A
|
3.60 |
0xE0D63D2A
|
_sceIoGetstatByFd
Version |
NID
|
1.69 |
0xE6C53567
|
3.60 |
0xE6C53567
|
_sceIoSetPriorityForSystem
Version |
NID
|
1.69 |
0xE6C923B3
|
3.60 |
different NID or not present
|
_sceIoDopen
Version |
NID
|
1.69 |
0xE6E614B5
|
3.60 |
0xE6E614B5
|
sceIoGetPriorityForSystem
Version |
NID
|
1.69 |
0xEF5432ED
|
3.60 |
0xEF5432ED
|
sceIoGetPriority
Version |
NID
|
1.69 |
0xF2A472A1
|
3.60 |
0xF2A472A1
|
_sceIoRead
Version |
NID
|
1.69 |
0xF3C9E783
|
3.60 |
different NID or not present
|
_sceIoSyncByFd
Version |
NID
|
1.69 |
0xF437545D
|
3.60 |
different NID or not present
|
_sceIoCloseAsync
Version |
NID
|
1.69 |
0xF4E13260
|
3.60 |
different NID or not present
|
_sceIoDopenAsync
Version |
NID
|
1.69 |
0xF58286C3
|
3.60 |
different NID or not present
|
sceIoDreadAsync
Version |
NID
|
1.69 |
0xF59F37B0
|
3.60 |
0xF59F37B0
|
_sceIoMkdirAsync
Version |
NID
|
1.69 |
0xF5C58B21
|
3.60 |
0xF5C58B21
|
_sceIoCancel
Version |
NID
|
1.69 |
0xF5DEEA19
|
3.60 |
different NID or not present
|
_sceIoClose
Version |
NID
|
1.69 |
0xF69FB394
|
3.60 |
different NID or not present
|
_sceIoDclose
Version |
NID
|
1.69 |
0xFAFF0002
|
3.60 |
different NID or not present
|
sceIoGetThreadDefaultPriorityForSystem
Version |
NID
|
1.69 |
0xFCBCEAED
|
3.60 |
0xFCBCEAED
|
sceIoRead
Version |
NID
|
1.69 |
0xFDB32293
|
3.60 |
0xFDB32293
|
_sceIoRmdir
Version |
NID
|
1.69 |
0xFFFB4D76
|
3.60 |
0xFFFB4D76
|
Device Drivers