ntdll: Support overriding the codepage from the manifest.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52223
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2022-04-13 15:58:59 +02:00
parent 1326687feb
commit 967ef0bf41
2 changed files with 22 additions and 1 deletions

View File

@ -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

View File

@ -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)