diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp index a554794..3a96ed5 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/ActCompleter.cpp @@ -23,6 +23,9 @@ #include #include #include +#include + +#include "AgeChecker.h" namespace ConsoleRestore { @@ -142,12 +145,42 @@ nn::Result ActCompleter::ExecImpl() // サルベージ終了をシステムに通知 s_EndEvent.Signal(); - if(nn::cfg::GetRegion() == nn::cfg::CFG_REGION_AMERICA) + // COPPA判定とPIN判定の準備 + nn::cfg::CfgRegionCode region = nn::cfg::GetRegion(); + u8 age = nn::act::GetAgeAtSalvage(); + nn::cfg::CfgCountryCode country; + + NN_UTIL_RETURN_IF_FAILED_2( + nn::act::GetCountryCodeAtSalvage(reinterpret_cast(&country)), + nn::act::FinalizeAdmin(), + common::FinalizeNetwork()); + + AgeChecker ageChecker; + + if(region == nn::cfg::CFG_REGION_AMERICA) + { + + if(ageChecker.IsCoppaRequired(age, region, country)) + { + // COPPA対象の年齢なら復元する + s_ApprovalId = nn::act::GetSalvagedApprovalId(); + NN_UTIL_RETURN_IF_FAILED_2( + SaveApprovalId(), + nn::act::FinalizeAdmin(), + common::FinalizeNetwork()); + } + } + + // PIN必須ならフラグを立てる + if(ageChecker.IsPinRestrictionRequired(age, region, country)) { - // COPPA対象の年齢なら復元する - s_ApprovalId = nn::act::GetSalvagedApprovalId(); NN_UTIL_RETURN_IF_FAILED_2( - SaveApprovalId(), + nn::cfg::CTR::system::SetForceParentalControlFlag(true), + nn::act::FinalizeAdmin(), + common::FinalizeNetwork()); + + NN_UTIL_RETURN_IF_FAILED_2( + nn::cfg::CTR::system::FlushConfig(), nn::act::FinalizeAdmin(), common::FinalizeNetwork()); } diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/AgeChecker.cpp b/trunk/ConsoleDataMigration/sources/ConsoleRestore/AgeChecker.cpp index f06224a..1abfa1b 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/AgeChecker.cpp +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/AgeChecker.cpp @@ -47,7 +47,6 @@ bool AgeChecker::IsPinRestrictionRequired(u32 age, CfgRegionCode region, CfgCoun { return age < PIN_REQUIRED_AGE_IN_AUSTRALIA_AND_NEW_ZEALAND; } - break; default: { return age < PIN_REQUIRED_AGE_IN_EUROPE; diff --git a/trunk/ConsoleDataMigration/sources/ConsoleRestore/OMakefile b/trunk/ConsoleDataMigration/sources/ConsoleRestore/OMakefile index 6a9c439..c89eb36 100644 --- a/trunk/ConsoleDataMigration/sources/ConsoleRestore/OMakefile +++ b/trunk/ConsoleDataMigration/sources/ConsoleRestore/OMakefile @@ -34,6 +34,7 @@ SOURCES[] = RegionIdModifier.cpp PreinstallImporter.cpp ActCompleter.cpp + AgeChecker.cpp ../common/Util.cpp ../common/DrawSystemState.cpp ../common/FileTransfer.cpp