mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
バージョンの不一致をエラー表示するように git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@707 385bec56-5757-e545-9c3a-d8741f4650f1
145 lines
4.5 KiB
C++
145 lines
4.5 KiB
C++
/*---------------------------------------------------------------------------*
|
|
Project: Horizon
|
|
File: VersionDetect.cpp
|
|
|
|
Copyright 2009 Nintendo. All rights reserved.
|
|
|
|
These coded instructions, statements, and computer programs contain
|
|
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
Company Ltd., and are protected by Federal copyright law. They may
|
|
not be disclosed to third parties or copied or duplicated in any form,
|
|
in whole or in part, without the prior written consent of Nintendo.
|
|
|
|
$Rev$
|
|
*---------------------------------------------------------------------------*/
|
|
|
|
#include <nn.h>
|
|
#include <nn/fs.h>
|
|
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
|
|
|
|
#include "sysHeap.h"
|
|
#include "VersionDetect.h"
|
|
|
|
namespace
|
|
{
|
|
const nn::ProgramId cCupVerId[] =
|
|
{
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_JP,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_US,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_EU,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_EU,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_CN,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_KR,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_CUP_VERSION_TW,
|
|
};
|
|
|
|
const nn::ProgramId cNupVerId[] =
|
|
{
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_JP,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_US,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_EU,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_EU,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_CN,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_KR,
|
|
nn::pl::CTR::SHAREDDATA_TITLEID_NUP_VERSION_TW,
|
|
};
|
|
|
|
}
|
|
|
|
nn::Result GetCupVersion(nn::pl::CTR::CardUpdateVersion* cup, nn::cfg::CTR::CfgRegionCode region)
|
|
{
|
|
const size_t BUF_SIZE = 1024;
|
|
u8 buf[BUF_SIZE];
|
|
// CUPバージョン
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::MountContent("cver:", nn::fs::MEDIA_TYPE_NAND, cCupVerId[region], 0, 1, 1, buf, BUF_SIZE)
|
|
);
|
|
|
|
nn::fs::FileInputStream fis;
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
fis.TryInitialize(L"cver:/version.bin")
|
|
);
|
|
s64 fileSize = fis.GetSize();
|
|
NN_LOG("version.bin size = %lld\n", fileSize);
|
|
s32 ret;
|
|
void* addr = sys::Mem::getMainHeap()->getHeap()->Allocate(fileSize);
|
|
if(!addr)
|
|
{
|
|
return nn::MakePermanentResult(nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_APPLICATION,
|
|
nn::Result::DESCRIPTION_OUT_OF_MEMORY);
|
|
}
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
fis.TryRead(&ret, addr, fileSize)
|
|
);
|
|
|
|
nn::pl::CTR::CardUpdateVersion* ver_buf = reinterpret_cast<nn::pl::CTR::CardUpdateVersion*>(addr);
|
|
std::memcpy(cup, ver_buf, sizeof(nn::pl::CTR::CardUpdateVersion));
|
|
fis.Finalize();
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::Unmount("cver:")
|
|
);
|
|
|
|
sys::Mem::getMainHeap()->getHeap()->Free(addr);
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result GetNupVersion(nn::pl::CTR::NetworkUpdateVersion* nup, nn::cfg::CTR::CfgRegionCode region)
|
|
{
|
|
const size_t BUF_SIZE = 1024;
|
|
u8 buf[BUF_SIZE];
|
|
|
|
// NUPバージョン
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::MountContent("nver:", nn::fs::MEDIA_TYPE_NAND, cNupVerId[region], 0, 1, 1, buf, BUF_SIZE)
|
|
);
|
|
|
|
nn::fs::FileInputStream fis;
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
fis.TryInitialize(L"nver:/version.bin")
|
|
);
|
|
|
|
s64 fileSize = fis.GetSize();
|
|
NN_LOG("version.bin size = %lld\n", fileSize);
|
|
s32 ret;
|
|
void* addr = sys::Mem::getMainHeap()->getHeap()->Allocate(fileSize);
|
|
if(!addr)
|
|
{
|
|
return nn::MakePermanentResult(nn::Result::SUMMARY_OUT_OF_RESOURCE, nn::Result::MODULE_APPLICATION,
|
|
nn::Result::DESCRIPTION_OUT_OF_MEMORY);
|
|
}
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
fis.TryRead(&ret, addr, fileSize)
|
|
);
|
|
|
|
nn::pl::CTR::NetworkUpdateVersion* ver_buf = reinterpret_cast<nn::pl::CTR::NetworkUpdateVersion*>(addr);
|
|
std::memcpy(nup, ver_buf, sizeof(nn::pl::CTR::NetworkUpdateVersion));
|
|
fis.Finalize();
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
nn::fs::Unmount("nver:")
|
|
);
|
|
|
|
sys::Mem::getMainHeap()->getHeap()->Free(addr);
|
|
return nn::ResultSuccess();
|
|
}
|
|
|
|
nn::Result GetSystemVersion(VerDef* mVerData, nn::cfg::CTR::CfgRegionCode region)
|
|
{
|
|
mVerData->region = region;
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
GetCupVersion(&mVerData->cup, region)
|
|
);
|
|
|
|
NN_UTIL_RETURN_IF_FAILED(
|
|
GetNupVersion(&mVerData->nup, region)
|
|
);
|
|
|
|
|
|
return nn::ResultSuccess();
|
|
}
|