From 967ef0bf41fc6742398313ebdebd681c1b33dbc3 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 13 Apr 2022 15:58:59 +0200 Subject: [PATCH] ntdll: Support overriding the codepage from the manifest. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52223 Signed-off-by: Alexandre Julliard --- dlls/ntdll/loader.c | 2 +- dlls/ntdll/locale.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index b6cc53763af..d750f7a7579 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -4126,8 +4126,8 @@ void WINAPI LdrInitializeThunk( CONTEXT *context, ULONG_PTR unknown2, ULONG_PTR RtlInitAnsiString( &func_name, "CtrlRoutine" ); LdrGetProcedureAddress( kernel32->ldr.DllBase, &func_name, 0, (void **)&pCtrlRoutine ); - locale_init(); actctx_init(); + locale_init(); if (wm->ldr.Flags & LDR_COR_ILONLY) status = fixup_imports_ilonly( wm, NULL, entry ); else diff --git a/dlls/ntdll/locale.c b/dlls/ntdll/locale.c index 3c96a742e4e..b95b3522fce 100644 --- a/dlls/ntdll/locale.c +++ b/dlls/ntdll/locale.c @@ -209,6 +209,27 @@ void locale_init(void) oem_cp = get_locale_data( entry->idx )->idefaultcodepage; } + if (!RtlQueryActivationContextApplicationSettings( 0, NULL, L"http://schemas.microsoft.com/SMI/2019/WindowsSettings", + L"activeCodePage", locale, ARRAY_SIZE(locale), NULL )) + { + const NLS_LOCALE_LCNAME_INDEX *entry = find_lcname_entry( locale ); + + if (!wcsicmp( locale, L"utf-8" )) + { + ansi_cp = oem_cp = CP_UTF8; + } + else if (!wcsicmp( locale, L"legacy" )) + { + if (ansi_cp == CP_UTF8) ansi_cp = 1252; + if (oem_cp == CP_UTF8) oem_cp = 437; + } + else if ((entry = find_lcname_entry( locale ))) + { + ansi_cp = get_locale_data( entry->idx )->idefaultansicodepage; + oem_cp = get_locale_data( entry->idx )->idefaultcodepage; + } + } + NtGetNlsSectionPtr( 10, 0, NULL, &case_ptr, &size ); NtCurrentTeb()->Peb->UnicodeCaseTableData = case_ptr; if (ansi_cp != CP_UTF8)