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;
|
return !s_CheckSdOnlyMode && !s_NupOnlyMode && !s_GetIvsOnlyMode && !s_DownloadPreinstallMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HasDeviceIdFile()
|
||||||
|
{
|
||||||
|
return HasValidRtcData();
|
||||||
|
}
|
||||||
|
|
||||||
typedef enum RestoreState
|
typedef enum RestoreState
|
||||||
{
|
{
|
||||||
STARTUP, // 初期値
|
STARTUP, // 初期値
|
||||||
@ -392,17 +397,24 @@ void CheckAccountDeleted(common::HardwareStateManager& manager, common::Operatio
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 同一本体下記書き戻しの場合はアカウント削除しない
|
if(HasDeviceIdFile())
|
||||||
if(EqualsDeviceIdFileandDeviceId(manager).IsSuccess())
|
|
||||||
{
|
{
|
||||||
// IVS専用モードならばIVSを取得させる
|
if (ExistsDeviceIdFile().IsFailure())
|
||||||
if(s_GetIvsOnlyMode)
|
|
||||||
{
|
{
|
||||||
CheckDownloadIvs(manager, message, goNextStep);
|
// 異常なのでFAIL
|
||||||
|
COMMON_LOGGER("Can't Read Device Id!!");
|
||||||
|
s_RestoreState = FAIL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 同一本体下記書き戻しの場合はアカウント削除しない
|
||||||
|
if (EqualsDeviceIdFileandDeviceId(manager))
|
||||||
|
{
|
||||||
|
CheckAccountTransfered(manager, message, goNextStep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CheckAccountTransfered(manager, message, goNextStep);
|
s_RestoreState = WAIT_START_DELETE_ACCOUNT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -73,7 +73,6 @@ TimeZone s_TimeZone;
|
|||||||
const size_t NTP_SERVER_NAME_LENGTH = 256;
|
const size_t NTP_SERVER_NAME_LENGTH = 256;
|
||||||
char s_NtpServerName[NTP_SERVER_NAME_LENGTH];
|
char s_NtpServerName[NTP_SERVER_NAME_LENGTH];
|
||||||
|
|
||||||
bool s_CheckedEqualsDeviceIdFileandDeviceId = false;
|
|
||||||
bool s_CheckedEqualsRegionDataandRegion = false;
|
bool s_CheckedEqualsRegionDataandRegion = false;
|
||||||
bool s_ReadSerialNumber = false;
|
bool s_ReadSerialNumber = false;
|
||||||
|
|
||||||
@ -260,15 +259,24 @@ nn::Result ReadSerialNumber(u8* serial)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager)
|
nn::Result ExistsDeviceIdFile()
|
||||||
{
|
{
|
||||||
static nn::Result result = nn::ResultSuccess();
|
common::SdReaderWriter sdReader;
|
||||||
|
size_t totalSize;
|
||||||
if(s_CheckedEqualsDeviceIdFileandDeviceId)
|
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");
|
COMMON_LOGGER("Check Device Id\n");
|
||||||
|
|
||||||
bit32 sdDeviceId;
|
bit32 sdDeviceId;
|
||||||
@ -277,32 +285,16 @@ nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager)
|
|||||||
size_t bufSize = 1024;
|
size_t bufSize = 1024;
|
||||||
common::HeapManager heap(bufSize);
|
common::HeapManager heap(bufSize);
|
||||||
void* buf = heap.GetAddr();
|
void* buf = heap.GetAddr();
|
||||||
if (buf != NULL)
|
if (buf == NULL)
|
||||||
{
|
{
|
||||||
result = sdReader.ReadBufWithCmac(common::DEVICE_ID_PATHNAME, buf, bufSize, &totalSize);
|
return false;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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()
|
nn::Result EqualsRegionDataandRegion()
|
||||||
@ -1624,7 +1616,6 @@ void ImportTwlSaveData()
|
|||||||
|
|
||||||
void ClearFileReadResult()
|
void ClearFileReadResult()
|
||||||
{
|
{
|
||||||
s_CheckedEqualsDeviceIdFileandDeviceId = false;
|
|
||||||
s_CheckedEqualsRegionDataandRegion = false;
|
s_CheckedEqualsRegionDataandRegion = false;
|
||||||
s_ReadSerialNumber = false;
|
s_ReadSerialNumber = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,8 +25,11 @@
|
|||||||
namespace ConsoleRestore
|
namespace ConsoleRestore
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// SDカードのデバイスIDファイルが存在するか
|
||||||
|
nn::Result ExistsDeviceIdFile();
|
||||||
|
|
||||||
// SDカードのデバイスIDファイルと本体のデバイスIDが一致しているかどうか
|
// SDカードのデバイスIDファイルと本体のデバイスIDが一致しているかどうか
|
||||||
nn::Result EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager);
|
bool EqualsDeviceIdFileandDeviceId(common::HardwareStateManager& manager);
|
||||||
|
|
||||||
// SDカードのリージョンと本体のリージョンが一致しているかどうか
|
// SDカードのリージョンと本体のリージョンが一致しているかどうか
|
||||||
nn::Result EqualsRegionDataandRegion();
|
nn::Result EqualsRegionDataandRegion();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user