Ejemplo n.º 1
0
Result backupAllExtdata(u8 *filebuffer, size_t bufsize)
{
	Result ret=0;
	u8 region=0;
	
	memset(filebuffer, 0, bufsize);

	ret = initCfgu();
	if(ret!=0)
	{
		printf("initCfgu() failed: 0x%08x\n", (unsigned int)ret);
		gfxFlushBuffers();
		gfxSwapBuffers();
		return ret;
	}

	ret = CFGU_SecureInfoGetRegion(&region);
	if(ret!=0)
	{
		printf("CFGU_SecureInfoGetRegion() failed: 0x%08x\n", (unsigned int)ret);
		gfxFlushBuffers();
		gfxSwapBuffers();
		return ret;
	}
	exitCfgu();

	
	u32* extdataList = (u32*)malloc(0x10000);
	if (extdataList==NULL)
	{
		printf("malloc failed\n");
		gfxFlushBuffers();
		gfxSwapBuffers();
		return -1;
	}
	int i;
	
	u32 extdataCount = 0;
	ret = EnumerateExtSaveData((u8*) extdataList, 0x10000, &extdataCount, false);
	if(ret!=0)
	{
		printf("EnumerateExtSaveData() failed: 0x%08x\n", (unsigned int)ret);
		gfxFlushBuffers();
		gfxSwapBuffers();
		return ret;
	}
	
	for (i=0; i<extdataCount; ++i) {
		dumpArchive(mediatype_SDMC, extdataList[i], ARCH_EXTDATA, user_extdata_dumpfolder, filebuffer, bufsize);
	}
	
	extdataCount = 0;
	ret = EnumerateExtSaveData((u8*) extdataList, 0x10000, &extdataCount, true);
	if(ret!=0)
	{
		printf("EnumerateExtSaveData() failed: 0x%08x\n", (unsigned int)ret);
		gfxFlushBuffers();
		gfxSwapBuffers();
		return ret;
	}
	
	for (i=0; i<extdataCount; ++i) {
		dumpArchive(mediatype_NAND, extdataList[i], ARCH_SHARED_EXTDATA, shared_extdata_dumpfolder, filebuffer, bufsize);
	}
	free(extdataList);
	
	printf("Success!\n");
	gfxFlushBuffers();
	gfxSwapBuffers();
	//svcSleepThread(5000000000LL);
	
	return 0;
}
Ejemplo n.º 2
0
Result backupAllExtdata(u8 *filebuffer, size_t bufsize)
{
    Result ret=0;
    u8 region=0;

    memset(filebuffer, 0, bufsize);

    ret = initCfgu();
    if(ret!=0)
    {
        printf("initCfgu() failed: 0x%08x\n", (unsigned int)ret);
        gfxFlushBuffers();
        gfxSwapBuffers();
        return ret;
    }

    ret = CFGU_SecureInfoGetRegion(&region);
    if(ret!=0)
    {
        printf("CFGU_SecureInfoGetRegion() failed: 0x%08x\n", (unsigned int)ret);
        gfxFlushBuffers();
        gfxSwapBuffers();
        return ret;
    }
    exitCfgu();

    amInit();
    u32 titleCount = 0;
    ret = AM_GetTitleCount(mediatype_SDMC, &titleCount);
    if(ret!=0)
    {
        printf("AM_GetTitleCount() failed: 0x%08x\n", (unsigned int)ret);
        gfxFlushBuffers();
        gfxSwapBuffers();
        return ret;
    }
    u64* titleList = (u64*)malloc(sizeof(u64) * titleCount);
    ret = AM_GetTitleIdList(mediatype_SDMC, titleCount, titleList);
    if(ret!=0)
    {
        printf("AM_GetTitleIdList() failed: 0x%08x\n", (unsigned int)ret);
        gfxFlushBuffers();
        gfxSwapBuffers();
        return ret;
    }

    int i;
    for (i=0; i<titleCount; ++i) {
        unsigned int title = (titleList[i]>>8) & 0xFFFFFF;
        dumpArchive(mediatype_SDMC, title, ARCH_EXTDATA, user_extdata_dumpfolder, filebuffer, bufsize);
        if (title == 0x725) {
            svcSleepThread(5000000000LL);
        }
    }
    free(titleList);
    amExit();

    for (i=0xE0000000; i<0xE0000100; ++i) {
        dumpArchive(mediatype_NAND, i, ARCH_SHARED_EXTDATA, shared_extdata_dumpfolder, filebuffer, bufsize);
    }
    for (i=0xF0000000; i<0xF0000100; ++i) {
        dumpArchive(mediatype_NAND, i, ARCH_SHARED_EXTDATA, shared_extdata_dumpfolder, filebuffer, bufsize);
    }

    printf("Success!\n");
    gfxFlushBuffers();
    gfxSwapBuffers();
    //svcSleepThread(5000000000LL);

    return 0;
}