This commit is contained in:
Maschell 2022-05-18 17:15:43 +02:00
parent 15a9847ae5
commit 97ef9cd993
2 changed files with 52 additions and 0 deletions

View File

@ -38,6 +38,11 @@ extern "C" {
#define FSA_MOUNTFLAGS_BINDMOUNT (1 << 0)
#define FSA_MOUNTFLAGS_GLOBAL (1 << 1)
int IOSUHAX_UnlockFSClient(FSClient *client);
int IOSUHAX_FSMount(FSClient *client, const char *source, const char *target);
int IOSUHAX_Open(const char *dev); // if dev == NULL the default path /dev/iosuhax will be used
int IOSUHAX_Close(void);

View File

@ -71,6 +71,53 @@ static int iosuhaxHandle = -1;
#define ALIGN_0x20 ALIGN(0x20)
#define ROUNDUP(x, align) (((x) + ((align) -1)) & ~((align) -1))
static void *fsClientGetBody(FSClient *client) {
if (!client) {
return 0;
}
void *body = (void *) (ROUNDUP((uint32_t) client, 0x40));
return body;
}
extern FSClient *__wut_devoptab_fs_client;
int IOSUHAX_UnlockFSClient(FSClient *client) {
uint8_t *body = (uint8_t *) fsClientGetBody(client);
int handle = (int) *(uint32_t *) (body + 0x1444);
ALIGN(0x40)
int dummy[0x40 >> 2];
int32_t iVar2 = IOS_Ioctl(handle, 0x28, dummy, sizeof(dummy), dummy, sizeof(dummy));
return iVar2;
}
typedef struct FSAShimBuffer FSAShimBuffer;
struct FSAShimBuffer {
char u1[0x938];
};
#define __FSAShimSetupRequestMount ((int (*)(FSAShimBuffer *, uint32_t, const char *, const char *, uint32_t, uint32_t, uint32_t))(0x101C400 + 0x042f88))
#define __FSAShimSend ((int (*)(FSAShimBuffer *, uint32_t))(0x101C400 + 0x042d90))
int IOSUHAX_FSMount(FSClient *client, const char *source, const char *target) {
FSAShimBuffer *buffer = (FSAShimBuffer *) memalign(0x40, 0x1000);
if (!buffer) {
return -1;
}
uint8_t *body = (uint8_t *) fsClientGetBody(client);
int handle = (int) *(uint32_t *) (body + 0x1444);
int res = __FSAShimSetupRequestMount(buffer, handle, source, target, 0, 0, 0);
if (res != 0) {
free(buffer);
return res;
}
res = __FSAShimSend(buffer, 0);
free(buffer);
return res;
}
int IOSUHAX_Open(const char *dev) {
if (iosuhaxHandle >= 0)
return iosuhaxHandle;