mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
ApprovalIdをCAVE-Accountのシステムセーブデータに書き込む
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@784 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
03918872c3
commit
2f7b370403
@ -21,6 +21,7 @@
|
|||||||
#include <nn/act/act_ApiTransfer.h>
|
#include <nn/act/act_ApiTransfer.h>
|
||||||
#include <nn/act/act_ResultPrivate.h>
|
#include <nn/act/act_ResultPrivate.h>
|
||||||
#include <nn/actslv/actslv_Api.h>
|
#include <nn/actslv/actslv_Api.h>
|
||||||
|
#include <nn/fs/fs_ApiSysSaveData.h>
|
||||||
|
|
||||||
namespace ConsoleRestore
|
namespace ConsoleRestore
|
||||||
{
|
{
|
||||||
@ -135,11 +136,17 @@ nn::Result ActCompleter::ExecImpl()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s_ApprovalId = nn::act::GetSalvagedApprovalId();
|
|
||||||
COMMON_LOGGER("ApprovalId = %d\n", s_ApprovalId);
|
|
||||||
|
|
||||||
// サルベージ終了をシステムに通知
|
// サルベージ終了をシステムに通知
|
||||||
s_EndEvent.Signal();
|
s_EndEvent.Signal();
|
||||||
|
|
||||||
|
if(nn::cfg::GetRegion() == nn::cfg::CFG_REGION_AMERICA)
|
||||||
|
{
|
||||||
|
s_ApprovalId = nn::act::GetSalvagedApprovalId();
|
||||||
|
NN_UTIL_RETURN_IF_FAILED_2(
|
||||||
|
SaveApprovalId(),
|
||||||
|
nn::act::FinalizeAdmin(),
|
||||||
|
common::FinalizeNetwork());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 移行完了
|
// 移行完了
|
||||||
@ -158,4 +165,42 @@ nn::Result ActCompleter::ExecImpl()
|
|||||||
return nn::ResultSuccess();
|
return nn::ResultSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nn::Result ActCompleter::SaveApprovalId()
|
||||||
|
{
|
||||||
|
// Cave-accountのシステムセーブデータ設定
|
||||||
|
const u32 CAVE_ACCOUNT_US_SAVEDATA_ID = 0x000202C0;
|
||||||
|
const u32 MAX_FILES = 5;
|
||||||
|
const u32 MAX_DIRECTORIES = 1;
|
||||||
|
const u32 SAVE_DATA_SIZE = 512 * 1024;
|
||||||
|
|
||||||
|
// Cave-accountのファイル書き込み設定
|
||||||
|
const char* const SYSTEM_SAVEDATA_ARCHIVE_NAME = "ssave:";
|
||||||
|
const char* const CAVE_FILE_NAME = "ssave:/s.bin";
|
||||||
|
const u32 APPROVAL_ID_OFFSET = 0x11000;
|
||||||
|
|
||||||
|
NN_UTIL_RETURN_IF_FAILED(
|
||||||
|
nn::fs::CreateSystemSaveData(CAVE_ACCOUNT_US_SAVEDATA_ID, MAX_FILES, MAX_DIRECTORIES, SAVE_DATA_SIZE, true));
|
||||||
|
|
||||||
|
NN_UTIL_RETURN_IF_FAILED(
|
||||||
|
nn::fs::MountSystemSaveData(SYSTEM_SAVEDATA_ARCHIVE_NAME, CAVE_ACCOUNT_US_SAVEDATA_ID));
|
||||||
|
|
||||||
|
{
|
||||||
|
nn::fs::FileOutputStream out(CAVE_FILE_NAME, true);
|
||||||
|
out.SetPosition(APPROVAL_ID_OFFSET);
|
||||||
|
s32 writeSize;
|
||||||
|
NN_UTIL_RETURN_IF_FAILED_1(
|
||||||
|
out.TryWrite(&writeSize, &s_ApprovalId, sizeof(s_ApprovalId), true),
|
||||||
|
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
|
||||||
|
|
||||||
|
NN_UTIL_RETURN_IF_FAILED_1(
|
||||||
|
nn::fs::CommitSystemSaveData(SYSTEM_SAVEDATA_ARCHIVE_NAME),
|
||||||
|
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
NN_UTIL_RETURN_IF_FAILED(
|
||||||
|
nn::fs::Unmount(SYSTEM_SAVEDATA_ARCHIVE_NAME));
|
||||||
|
|
||||||
|
return nn::ResultSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
} /* namespace ConsoleRestore */
|
} /* namespace ConsoleRestore */
|
||||||
|
|||||||
@ -46,6 +46,7 @@ private:
|
|||||||
static void Exec();
|
static void Exec();
|
||||||
static void UnmountThreadFunc();
|
static void UnmountThreadFunc();
|
||||||
static nn::Result ExecImpl();
|
static nn::Result ExecImpl();
|
||||||
|
static nn::Result SaveApprovalId();
|
||||||
|
|
||||||
static nn::Result s_Result;
|
static nn::Result s_Result;
|
||||||
static const size_t STACK_SIZE = 0x1000;
|
static const size_t STACK_SIZE = 0x1000;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user