diff --git a/libctru/include/3ds/services/cfgu.h b/libctru/include/3ds/services/cfgu.h index 926e005..5da6937 100644 --- a/libctru/include/3ds/services/cfgu.h +++ b/libctru/include/3ds/services/cfgu.h @@ -170,3 +170,9 @@ Result CFGI_VerifySigLocalFriendCodeSeed(void); * @brief Verifies the RSA signature for the SecureInfo data already stored in memory. */ Result CFGI_VerifySigSecureInfo(void); + +/** + * @brief Gets the system's serial number. + * @param serial Pointer to output the serial to. + */ +Result CFGI_SecureInfoGetSerialNumber(u8 *serial); diff --git a/libctru/source/services/cfgu.c b/libctru/source/services/cfgu.c index 48ea174..d8ec8d3 100644 --- a/libctru/source/services/cfgu.c +++ b/libctru/source/services/cfgu.c @@ -315,3 +315,18 @@ Result CFGI_VerifySigSecureInfo(void) return (Result)cmdbuf[1]; } + +Result CFGI_SecureInfoGetSerialNumber(u8 *serial) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x408,1,2); // 0x4080042 + cmdbuf[1] = 0xF; + cmdbuf[2] = 12 | (0xF << 4); + cmdbuf[3] = (u32)serial; + + if(R_FAILED(ret = svcSendSyncRequest(cfguHandle)))return ret; + + return (Result)cmdbuf[1]; +}