From 45b7b66991337ff7e07560a8baf6eceffaaaddec Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 20:59:17 +0100 Subject: [PATCH 01/13] Update ns.h --- nx/include/switch/services/ns.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nx/include/switch/services/ns.h b/nx/include/switch/services/ns.h index 1e7f45513..5f63b47f3 100644 --- a/nx/include/switch/services/ns.h +++ b/nx/include/switch/services/ns.h @@ -312,6 +312,17 @@ Result nsGetDocumentInterface(Service* srv_out); */ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size); +/** + * @brief Gets the \ref NsApplicationControlData for the specified application. + * @note Only available on [19.0.0+]. + * @param[in] source Source, official sw uses ::NsApplicationControlSource_Storage. + * @param[in] application_id ApplicationId. + * @param[out] buffer \ref NsApplicationControlData + * @param[in] size Size of the buffer. + * @param[out] unk It returns always 0. + */ +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* unk); + /** * @brief GetApplicationDesiredLanguage. Selects a \ref NacpLanguageEntry to use from the specified \ref NacpStruct. * @note Uses \ref nsGetReadOnlyApplicationControlDataInterface on [5.1.0+], otherwise IApplicationManagerInterface is used. From cb1cde8aca4842db451884676e8c8443520219c5 Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 21:11:39 +0100 Subject: [PATCH 02/13] Update ns.c --- nx/source/services/ns.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index fd87c6c6d..6dbcb5ffe 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -488,6 +488,32 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic return rc; } +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size) { + if (hosversionBefore(19,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + Service srv={0}, *srv_ptr = &srv; + Result rc=0; + u32 cmd_id = 6; + rc = nsGetReadOnlyApplicationControlDataInterface(&srv); + + const struct { + u8 source; + u8 pad[7]; + u64 application_id; + } in = { source, {0}, application_id }; + + u32 tmp=0; + + if (R_SUCCEEDED(rc)) rc = serviceDispatchInOut(srv_ptr, cmd_id, in, tmp, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { buffer, size } }, + ); + if (R_SUCCEEDED(rc) && actual_size) *actual_size = tmp >> 32; + + serviceClose(&srv); + return rc; +} + Result nsGetApplicationDesiredLanguage(NacpStruct *nacp, NacpLanguageEntry **langentry) { if (nacp==NULL || langentry==NULL) return MAKERESULT(Module_Libnx, LibnxError_BadInput); From 51046766f359d4d1421b8fa43a068f58277ff02a Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 21:12:27 +0100 Subject: [PATCH 03/13] Update ns.c --- nx/source/services/ns.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index 6dbcb5ffe..6ec4d0f1e 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -502,7 +502,7 @@ Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 appli u64 application_id; } in = { source, {0}, application_id }; - u32 tmp=0; + u64 tmp=0; if (R_SUCCEEDED(rc)) rc = serviceDispatchInOut(srv_ptr, cmd_id, in, tmp, .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, From ad1b830ad5adf80988b19c482755da7edaff063f Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 21:13:44 +0100 Subject: [PATCH 04/13] Update ns.h --- nx/include/switch/services/ns.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nx/include/switch/services/ns.h b/nx/include/switch/services/ns.h index 5f63b47f3..6a3289ba4 100644 --- a/nx/include/switch/services/ns.h +++ b/nx/include/switch/services/ns.h @@ -319,9 +319,9 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic * @param[in] application_id ApplicationId. * @param[out] buffer \ref NsApplicationControlData * @param[in] size Size of the buffer. - * @param[out] unk It returns always 0. + * @param[out] actual_size Actual output size. */ -Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* unk); +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size); /** * @brief GetApplicationDesiredLanguage. Selects a \ref NacpLanguageEntry to use from the specified \ref NacpStruct. From 4ee29681efc35363b03f68164d7216142ff29e1b Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 22:10:28 +0100 Subject: [PATCH 05/13] Update ns.c --- nx/source/services/ns.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index 6ec4d0f1e..d673578bd 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -498,7 +498,8 @@ Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 appli const struct { u8 source; - u8 pad[7]; + u8 flags[2]; + u8 pad[5]; u64 application_id; } in = { source, {0}, application_id }; From 11f666ce36461ec2bc60bc60182d3e2db6391f00 Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 22:12:04 +0100 Subject: [PATCH 06/13] Update ns.c --- nx/source/services/ns.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index d673578bd..3b4baa1d0 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -501,7 +501,7 @@ Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 appli u8 flags[2]; u8 pad[5]; u64 application_id; - } in = { source, {0}, application_id }; + } in = { source, {0}, {0}, application_id }; u64 tmp=0; From 8ff48ef595e687852c52cca589705d118f49f697 Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 22:52:55 +0100 Subject: [PATCH 07/13] Update ns.h --- nx/include/switch/services/ns.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nx/include/switch/services/ns.h b/nx/include/switch/services/ns.h index 6a3289ba4..4456c4d84 100644 --- a/nx/include/switch/services/ns.h +++ b/nx/include/switch/services/ns.h @@ -320,8 +320,9 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic * @param[out] buffer \ref NsApplicationControlData * @param[in] size Size of the buffer. * @param[out] actual_size Actual output size. + * @param[out] unk Returned with size, always 0. */ -Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size); +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size, u32* unk); /** * @brief GetApplicationDesiredLanguage. Selects a \ref NacpLanguageEntry to use from the specified \ref NacpStruct. From 5028a3b3493840bf28241e2f11389ad5e7ebf128 Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 22:55:10 +0100 Subject: [PATCH 08/13] Update ns.c --- nx/source/services/ns.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index 3b4baa1d0..5fe0ccfa7 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -488,7 +488,7 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic return rc; } -Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size) { +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size, u32 unk) { if (hosversionBefore(19,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); Service srv={0}, *srv_ptr = &srv; @@ -509,7 +509,10 @@ Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 appli .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, .buffers = { { buffer, size } }, ); - if (R_SUCCEEDED(rc) && actual_size) *actual_size = tmp >> 32; + if (R_SUCCEEDED(rc)) { + if (actual_size) *actual_size = tmp >> 32; + if (unk) *unk = (u32)tmp; + } serviceClose(&srv); return rc; From bbc736ccc9e0e16ca068035ccab91dc313d8201d Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 22:59:16 +0100 Subject: [PATCH 09/13] Update ns.h --- nx/include/switch/services/ns.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nx/include/switch/services/ns.h b/nx/include/switch/services/ns.h index 4456c4d84..5fdc211a9 100644 --- a/nx/include/switch/services/ns.h +++ b/nx/include/switch/services/ns.h @@ -318,11 +318,14 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic * @param[in] source Source, official sw uses ::NsApplicationControlSource_Storage. * @param[in] application_id ApplicationId. * @param[out] buffer \ref NsApplicationControlData + * @param[in] flag1 Default is 0. 0xFF speeds up execution. + * @param[in] flag2 Default is 0. + * @param[in] application_id ApplicationId. * @param[in] size Size of the buffer. * @param[out] actual_size Actual output size. * @param[out] unk Returned with size, always 0. */ -Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size, u32* unk); +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, u8 flag1, u8 flag2, size_t size, u64* actual_size, u32* unk); /** * @brief GetApplicationDesiredLanguage. Selects a \ref NacpLanguageEntry to use from the specified \ref NacpStruct. From 7c27aa9e89ab62e586c023ddc7647a0012887f16 Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 22:59:55 +0100 Subject: [PATCH 10/13] Update ns.c --- nx/source/services/ns.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index 5fe0ccfa7..561749990 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -488,7 +488,7 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic return rc; } -Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u64* actual_size, u32 unk) { +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, u8 flag1, u8 flag2, size_t size, u64* actual_size, u32* unk) { if (hosversionBefore(19,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); Service srv={0}, *srv_ptr = &srv; @@ -501,7 +501,7 @@ Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 appli u8 flags[2]; u8 pad[5]; u64 application_id; - } in = { source, {0}, {0}, application_id }; + } in = { source, {flag1, flag2}, {0}, application_id }; u64 tmp=0; From 491881a586473fb272f9ed8849dc5354e03a37b0 Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Fri, 5 Dec 2025 23:00:39 +0100 Subject: [PATCH 11/13] Update ns.h --- nx/include/switch/services/ns.h | 1 - 1 file changed, 1 deletion(-) diff --git a/nx/include/switch/services/ns.h b/nx/include/switch/services/ns.h index 5fdc211a9..63e12ed07 100644 --- a/nx/include/switch/services/ns.h +++ b/nx/include/switch/services/ns.h @@ -320,7 +320,6 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic * @param[out] buffer \ref NsApplicationControlData * @param[in] flag1 Default is 0. 0xFF speeds up execution. * @param[in] flag2 Default is 0. - * @param[in] application_id ApplicationId. * @param[in] size Size of the buffer. * @param[out] actual_size Actual output size. * @param[out] unk Returned with size, always 0. From 24c8c065ca3a111b69933b8a850eec9c5e0e464e Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Sat, 6 Dec 2025 19:35:49 +0100 Subject: [PATCH 12/13] Update ns.h --- nx/include/switch/services/ns.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nx/include/switch/services/ns.h b/nx/include/switch/services/ns.h index 63e12ed07..969610a20 100644 --- a/nx/include/switch/services/ns.h +++ b/nx/include/switch/services/ns.h @@ -318,13 +318,13 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic * @param[in] source Source, official sw uses ::NsApplicationControlSource_Storage. * @param[in] application_id ApplicationId. * @param[out] buffer \ref NsApplicationControlData + * @param[in] size Size of the buffer. * @param[in] flag1 Default is 0. 0xFF speeds up execution. * @param[in] flag2 Default is 0. - * @param[in] size Size of the buffer. * @param[out] actual_size Actual output size. * @param[out] unk Returned with size, always 0. */ -Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, u8 flag1, u8 flag2, size_t size, u64* actual_size, u32* unk); +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u8 flag1, u8 flag2, u64* actual_size, u32* unk); /** * @brief GetApplicationDesiredLanguage. Selects a \ref NacpLanguageEntry to use from the specified \ref NacpStruct. From b1295a2205614f7f88143fad4630893b01de951d Mon Sep 17 00:00:00 2001 From: MasaGratoR Date: Sat, 6 Dec 2025 19:36:07 +0100 Subject: [PATCH 13/13] Update ns.c --- nx/source/services/ns.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nx/source/services/ns.c b/nx/source/services/ns.c index 561749990..a1ec650e8 100644 --- a/nx/source/services/ns.c +++ b/nx/source/services/ns.c @@ -488,7 +488,7 @@ Result nsGetApplicationControlData(NsApplicationControlSource source, u64 applic return rc; } -Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, u8 flag1, u8 flag2, size_t size, u64* actual_size, u32* unk) { +Result nsGetApplicationControlData2(NsApplicationControlSource source, u64 application_id, NsApplicationControlData* buffer, size_t size, u8 flag1, u8 flag2, u64* actual_size, u32* unk) { if (hosversionBefore(19,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); Service srv={0}, *srv_ptr = &srv;