TWLタイトルのリストを出力するように

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@205 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2011-04-19 07:03:50 +00:00
parent 0d5491fe3d
commit fb5e0ebbc3
6 changed files with 99 additions and 1 deletions

View File

@ -34,6 +34,7 @@
#include <nn/fs/fs_ApiSharedExtSaveData.h> #include <nn/fs/fs_ApiSharedExtSaveData.h>
#include <nn/nim.h> #include <nn/nim.h>
#include <nn/ndm.h> #include <nn/ndm.h>
#include <nn/am.h>
#include "demo.h" #include "demo.h"
@ -187,6 +188,9 @@ extern "C" void nnMain(void)
nn::mcu::CTR::HwCheck mcu(s_McuSession); nn::mcu::CTR::HwCheck mcu(s_McuSession);
// amの初期化
nn::am::InitializeForSystemMenu();
// ヒープの確保 // ヒープの確保
common::HeapManager::GetHeap()->Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR); common::HeapManager::GetHeap()->Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR);

View File

@ -31,6 +31,7 @@ namespace
typedef enum BackupState typedef enum BackupState
{ {
STARTUP, // 初期値 STARTUP, // 初期値
EXPORT_TWL_LIST, // TWLアプリのリストを書き出し中
EXPORT_TWL_NAND, // TWLセーブデータ領域の吸出し中 EXPORT_TWL_NAND, // TWLセーブデータ領域の吸出し中
EXPORT_TWL_SOUND, // TWLサウンド領域の吸出し中 EXPORT_TWL_SOUND, // TWLサウンド領域の吸出し中
EXPORT_TWL_PHOTO, // TWL写真領域の吸出し中 EXPORT_TWL_PHOTO, // TWL写真領域の吸出し中
@ -146,6 +147,28 @@ void ControlState(::std::vector<std::string>& operationMessage, bool& nextStep,
if (nextStep && !error) if (nextStep && !error)
{ {
COMMON_LOGGER("Start Export Data\n"); COMMON_LOGGER("Start Export Data\n");
s_BackupState = EXPORT_TWL_LIST;
}
}
break;
// TWLセーブデータ領域の吸出し中
case EXPORT_TWL_LIST:
{
static bool init = true;
if(init)
{
// データを書き込む
ExportTwlTitleList();
init = false;
}
// 処理が完了した
if (IsExportFinished())
{
FinalizeExportThread();
s_BackupState = EXPORT_TWL_NAND; s_BackupState = EXPORT_TWL_NAND;
} }
} }

View File

@ -18,6 +18,7 @@
#include <cwchar> #include <cwchar>
#include <string> #include <string>
#include <cstdlib> #include <cstdlib>
#include <nn/nstd.h>
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h> #include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h> #include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
#include <nn/cfg/CTR/cfg_Api.h> #include <nn/cfg/CTR/cfg_Api.h>
@ -30,6 +31,7 @@
#include <nn/crypto/crypto_Sha256.h> #include <nn/crypto/crypto_Sha256.h>
#include <nn/crypto/crypto_SwAesCmac.h> #include <nn/crypto/crypto_SwAesCmac.h>
#include <nn/mcu.h> #include <nn/mcu.h>
#include <nn/am.h>
#include "Exporter.h" #include "Exporter.h"
#include "CommonLogger.h" #include "CommonLogger.h"
@ -154,6 +156,67 @@ void DeleteTrash(std::wstring currentDirectory)
common::SdMountManager::Unmount(); common::SdMountManager::Unmount();
} }
void WriteTwlTitleData()
{
COMMON_LOGGER("Export TwlTitle Data.\n");
const u32 AM_TICKET_MAX = 8192;
s32 personalizedTicketNum;
nn::am::TicketInfo *ticketInfoBuffer =
reinterpret_cast<nn::am::TicketInfo*> (common::HeapManager::GetHeap()->Allocate(
sizeof(nn::am::TicketInfo) * AM_TICKET_MAX));
if(ticketInfoBuffer == NULL)
{
return;
}
nn::Result result=nn::am::GetPersonalizedTicketInfoList(&personalizedTicketNum, ticketInfoBuffer, AM_TICKET_MAX); // 全部
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
if(result.IsFailure())
{
return;
}
u32 twlTiteNum = 0;
for (u32 i = 0; i < personalizedTicketNum; i++)
{
if (nn::CTR::IsTwlApp(ticketInfoBuffer[i].titleId))
{
twlTiteNum++;
}
}
if (twlTiteNum > 0)
{
const size_t BYTES_PER_LINE = sizeof(nn::ProgramID) * 2 + sizeof('\n');
char* titleListBuf = reinterpret_cast<char*> (common::HeapManager::GetHeap()->Allocate(
BYTES_PER_LINE * twlTiteNum + sizeof('0')));
if (titleListBuf != NULL)
{
for (u32 i = 0; i < personalizedTicketNum; i++)
{
if (nn::CTR::IsTwlApp(ticketInfoBuffer[i].titleId))
{
nn::nstd::TSNPrintf(titleListBuf + i * BYTES_PER_LINE,
BYTES_PER_LINE * twlTiteNum + sizeof('0') - i * BYTES_PER_LINE, "%016llx\n",
ticketInfoBuffer[i].titleId);
NN_LOG("%016llx\n", ticketInfoBuffer[i].titleId);
}
}
result = s_SdWriter.WriteBufWithCmac(common::TWL_TITLELIST_PATHNAME, titleListBuf,
BYTES_PER_LINE * twlTiteNum);
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
common::HeapManager::GetHeap()->Free(titleListBuf);
}
}
common::HeapManager::GetHeap()->Free(ticketInfoBuffer);
}
void WriteRegionData() void WriteRegionData()
{ {
COMMON_LOGGER("Export Region Data.\n"); COMMON_LOGGER("Export Region Data.\n");
@ -639,11 +702,16 @@ void InitializeFileListContext()
s_FileListContext.Initialize(); s_FileListContext.Initialize();
} }
void ExportTwlSaveData() void ExportTwlTitleList()
{ {
// 不要なデータを削除する // 不要なデータを削除する
DeleteTrash((std::wstring(common::LOG_ROOT_DIRECTORY_PATH) + std::wstring(L"/")).c_str()); DeleteTrash((std::wstring(common::LOG_ROOT_DIRECTORY_PATH) + std::wstring(L"/")).c_str());
s_ExportThread.Start(WriteTwlTitleData, s_ExportThreadStack);
}
void ExportTwlSaveData()
{
s_ExportThread.Start(WriteTwlSaveData, s_ExportThreadStack); s_ExportThread.Start(WriteTwlSaveData, s_ExportThreadStack);
} }

View File

@ -22,6 +22,7 @@ namespace ConsoleBackup
{ {
void InitializeFileListContext(); void InitializeFileListContext();
void ExportTwlTitleList();
void ExportTwlSaveData(); void ExportTwlSaveData();
void ExportTwlPhotoData(); void ExportTwlPhotoData();
void ExportTwlSoundData(); void ExportTwlSoundData();

View File

@ -72,6 +72,7 @@ LIBS += libnn_cfg \
libnn_nwm \ libnn_nwm \
libnn_friends \ libnn_friends \
libnn_nim \ libnn_nim \
libnn_am \
INSTALL_SDK_TOOL = true INSTALL_SDK_TOOL = true

View File

@ -59,6 +59,7 @@ const wchar_t* const VERSION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/version.
const wchar_t* const REGION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/Region.bin"; const wchar_t* const REGION_DATA_PATHNAME = L"sdmc:/CTR_Console_Repair/Region.bin";
const wchar_t* const DEVICE_ID_PATHNAME = L"sdmc:/CTR_Console_Repair/deviceId.bin"; const wchar_t* const DEVICE_ID_PATHNAME = L"sdmc:/CTR_Console_Repair/deviceId.bin";
const wchar_t* const FILE_LIST_PATHNAME = L"sdmc:/CTR_Console_Repair/FileList.txt"; const wchar_t* const FILE_LIST_PATHNAME = L"sdmc:/CTR_Console_Repair/FileList.txt";
const wchar_t* const TWL_TITLELIST_PATHNAME = L"sdmc:/CTR_Console_Repair/TwlTitleList.txt";
enum TWL_PATH_INDEX enum TWL_PATH_INDEX
{ {