diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp index fb32939..67780a8 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp @@ -21,6 +21,7 @@ #include #include #include +#include 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(); + + 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(); } +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 */ diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.h b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.h index cae96bb..8424d33 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.h +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.h @@ -46,6 +46,7 @@ private: static void Exec(); static void UnmountThreadFunc(); static nn::Result ExecImpl(); + static nn::Result SaveApprovalId(); static nn::Result s_Result; static const size_t STACK_SIZE = 0x1000;