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)