mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
データ移行可能本体でデバイスIDファイルが読み取れないときにエラーとする
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@754 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
6e5e142e01
commit
a1f61d287f
@ -103,6 +103,11 @@ bool HasValidRtcData()
|
||||
return !s_CheckSdOnlyMode && !s_NupOnlyMode && !s_GetIvsOnlyMode && !s_DownloadPreinstallMode;
|
||||
}
|
||||
|
||||
bool HasDeviceIdFile()
|
||||
{
|
||||
return HasValidRtcData();
|
||||
}
|
||||
|
||||
typedef enum RestoreState
|
||||
{
|
||||
STARTUP, // 初期値
|
||||
@ -392,17 +397,24 @@ void CheckAccountDeleted(common::HardwareStateManager& manager, common::Operatio
|
||||
}
|
||||
else
|
||||
{
|
||||
// 同一本体下記書き戻しの場合はアカウント削除しない
|
||||
if(EqualsDeviceIdFileandDeviceId(manager).IsSuccess())
|
||||
if(HasDeviceIdFile())
|
||||
{
|
||||
// IVS専用モードならばIVSを取得させる
|
||||
if(s_GetIvsOnlyMode)
|
||||
if (ExistsDeviceIdFile().IsFailure())
|
||||
{
|
||||
CheckDownloadIvs(manager, message, goNextStep);
|
||||
// 異常なのでFAIL
|
||||
COMMON_LOGGER("Can't Read Device Id!!");
|
||||
s_RestoreState = FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
// 同一本体下記書き戻しの場合はアカウント削除しない
|
||||
if (EqualsDeviceIdFileandDeviceId(manager))
|
||||
{
|
||||
CheckAccountTransfered(manager, message, goNextStep);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckAccountTransfered(manager, message, goNextStep);
|
||||
s_RestoreState = WAIT_START_DELETE_ACCOUNT;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@ -73,7 +73,6 @@ TimeZone s_TimeZone;
|
||||
const size_t NTP_SERVER_NAME_LENGTH = 256;
|
||||
char s_NtpServerName[NTP_SERVER_NAME_LENGTH];
|
||||
|
||||
bool s_CheckedEqualsDeviceIdFileandDeviceId = false;
|
||||
bool s_CheckedEqualsRegionDataandRegion = false;
|
||||
bool s_ReadSerialNumber = false;
|
||||
|
||||
@ -260,15 +259,24 @@ nn::Result ReadSerialNumber(u8* serial)
|
||||
return result;
|
||||
}
|
||||
|
||||
nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager)
|
||||
nn::Result ExistsDeviceIdFile()
|
||||
{
|
||||
static nn::Result result = nn::ResultSuccess();
|
||||
|
||||
if(s_CheckedEqualsDeviceIdFileandDeviceId)
|
||||
common::SdReaderWriter sdReader;
|
||||
size_t totalSize;
|
||||
size_t bufSize = 1024;
|
||||
common::HeapManager heap(bufSize);
|
||||
void* buf = heap.GetAddr();
|
||||
if(buf == NULL)
|
||||
{
|
||||
return result;
|
||||
return nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON,
|
||||
nn::Result::DESCRIPTION_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
return sdReader.ReadBufWithCmac(common::DEVICE_ID_PATHNAME, buf, bufSize, &totalSize);
|
||||
}
|
||||
|
||||
bool EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager)
|
||||
{
|
||||
COMMON_LOGGER("Check Device Id\n");
|
||||
|
||||
bit32 sdDeviceId;
|
||||
@ -277,32 +285,16 @@ nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager)
|
||||
size_t bufSize = 1024;
|
||||
common::HeapManager heap(bufSize);
|
||||
void* buf = heap.GetAddr();
|
||||
if (buf != NULL)
|
||||
if (buf == NULL)
|
||||
{
|
||||
result = sdReader.ReadBufWithCmac(common::DEVICE_ID_PATHNAME, buf, bufSize, &totalSize);
|
||||
if (result.IsSuccess())
|
||||
{
|
||||
s_CheckedEqualsDeviceIdFileandDeviceId = true;
|
||||
std::memcpy(&sdDeviceId, buf, sizeof(sdDeviceId));
|
||||
|
||||
if (manager.GetDeviceId() == sdDeviceId)
|
||||
{
|
||||
result = nn::ResultSuccess();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = nn::Result(nn::Result::LEVEL_STATUS, nn::Result::SUMMARY_INVALID_RESULT_VALUE,
|
||||
nn::Result::MODULE_COMMON, nn::Result::DESCRIPTION_INVALID_RESULT_VALUE);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = nn::Result(nn::Result::LEVEL_FATAL, nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_COMMON,
|
||||
nn::Result::DESCRIPTION_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
COMMON_LOGGER_RETURN_FALSE_IF_FAILED(
|
||||
sdReader.ReadBufWithCmac(common::DEVICE_ID_PATHNAME, buf, bufSize, &totalSize));
|
||||
|
||||
std::memcpy(&sdDeviceId, buf, sizeof(sdDeviceId));
|
||||
return (manager.GetDeviceId() == sdDeviceId);
|
||||
}
|
||||
|
||||
nn::Result EqualsRegionDataandRegion()
|
||||
@ -1624,7 +1616,6 @@ void ImportTwlSaveData()
|
||||
|
||||
void ClearFileReadResult()
|
||||
{
|
||||
s_CheckedEqualsDeviceIdFileandDeviceId = false;
|
||||
s_CheckedEqualsRegionDataandRegion = false;
|
||||
s_ReadSerialNumber = false;
|
||||
}
|
||||
|
||||
@ -25,8 +25,11 @@
|
||||
namespace ConsoleRestore
|
||||
{
|
||||
|
||||
// SDカードのデバイスIDファイルが存在するか
|
||||
nn::Result ExistsDeviceIdFile();
|
||||
|
||||
// SDカードのデバイスIDファイルと本体のデバイスIDが一致しているかどうか
|
||||
nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager);
|
||||
bool EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager);
|
||||
|
||||
// SDカードのリージョンと本体のリージョンが一致しているかどうか
|
||||
nn::Result EqualsRegionDataandRegion();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user