49 if (LanguageId ==
NULL)
53 LanguageId =
L"00000409";
135 L".DEFAULT\\Keyboard Layout\\Toggle");
163 (1 + 1) *
sizeof(
WCHAR));
179 (1 + 1) *
sizeof(
WCHAR));
195 (1 + 1) *
sizeof(
WCHAR));
220 WCHAR szKeyName[48] =
L".DEFAULT\\Keyboard Layout";
221 WCHAR szValueName[3 + 1];
222 WCHAR szSubstID[8 + 1];
223 WCHAR szLayoutID[8 + 1];
248 KeyName.MaximumLength =
sizeof(szKeyName);
296 for (uIndex = 0; (uIndex <= 19) && (MuiLayouts[uIndex].
LangID != 0); ++uIndex)
303 if ((
KLID)MuiLayouts[uIndex].
LangID == MuiLayouts[uIndex].LayoutID)
314 DPRINT1(
"NtSetValueKey() failed (Status = %lx, uIndex = %u)\n",
Status, uIndex);
322 (0xD0000000 | ((
USHORT)uCount << 4) | MuiLayouts[uIndex].
LangID));
331 DPRINT1(
"NtSetValueKey() failed (Status = %lx, uIndex = %u)\n",
Status, uIndex);
345 DPRINT1(
"NtSetValueKey() failed (Status = %lx, uIndex = %u)\n",
Status, uIndex);
399 L"SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage");
483 L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes");
498 while (MuiSubFonts[uIndex].FontName !=
NULL)
501 if (MuiSubFonts[uIndex].SubFontName)
507 (
PVOID)MuiSubFonts[uIndex].SubFontName,
508 (
wcslen(MuiSubFonts[uIndex].SubFontName)+1) *
sizeof(
WCHAR));
511 DPRINT1(
"NtSetValueKey() failed (Status = %lx, uIndex = %d)\n",
Status, uIndex);
HANDLE GetRootKeyByPredefKey(IN HANDLE KeyHandle, OUT PCWSTR *RootKeyMountPoint OPTIONAL)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_CASE_INSENSITIVE
KLID MUIDefaultKeyboardLayout(IN PCWSTR LanguageId)
BOOLEAN AddKbLayoutsToRegistry(_In_ const MUI_LAYOUTS *MuiLayouts)
const MUI_LAYOUTS * MUIGetLayoutsList(IN PCWSTR LanguageId)
GEOID MUIGetGeoID(IN PCWSTR LanguageId)
static ULONG FindLanguageIndex(IN PCWSTR LanguageId)
static BOOLEAN AddHotkeySettings(IN PCWSTR Hotkey, IN PCWSTR LangHotkey, IN PCWSTR LayoutHotkey)
BOOLEAN AddCodePage(IN PCWSTR LanguageId)
static BOOLEAN AddFontsSettingsToRegistry(IN const MUI_SUBFONT *MuiSubFonts)
static BOOLEAN AddCodepageToRegistry(_In_ UINT ACPage, _In_ UINT OEMCPage, _In_ UINT MACCPage)
BOOLEAN AddKeyboardLayouts(IN PCWSTR LanguageId)
BOOLEAN IsLanguageAvailable(IN PCWSTR LanguageId)
UINT MUIGetOEMCodePage(IN PCWSTR LanguageId)
const MUI_LANGUAGE MUILanguageList[]
#define InitializeObjectAttributes(p, n, a, r, s)
MUI_SUBFONT FontFixupMSGOTHIC[]
MUI_SUBFONT KoreanFontFixup[]
MUI_SUBFONT FontFixupMINGLIU[]
MUI_SUBFONT SimplifiedChineseFontFixup[]
MUI_SUBFONT TraditionalChineseFontFixup[]
MUI_SUBFONT JapaneseFontFixup[]
MUI_SUBFONT FontFixupGULIM[]
MUI_SUBFONT FontFixupSIMSUN[]
MUI_SUBFONT FontFixupMSMINCHO[]
MUI_SUBFONT FontFixupBATANG[]
MUI_SUBFONT FontFixupMSSONG[]
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ PNDIS_STRING _Out_ PNDIS_HANDLE SubKeyHandle
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
NTSYSAPI NTSTATUS NTAPI NtSetValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN ULONG TitleIndex OPTIONAL, IN ULONG Type, IN PVOID Data, IN ULONG DataSize)
NTSYSAPI NTSTATUS NTAPI NtDeleteValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define KEY_CREATE_SUB_KEY
#define REG_OPTION_NON_VOLATILE
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSTATUS NTAPI NtCreateKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG TitleIndex, IN PUNICODE_STRING Class OPTIONAL, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
NTSTRSAFEVAPI RtlStringCchPrintfW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define SUBLANG_CHINESE_SIMPLIFIED
const MUI_LAYOUTS * MuiLayouts
BOOL DoRegistryFontFixup(PFONTSUBSTSETTINGS pSettings, LANGID LangID)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
#define HKEY_LOCAL_MACHINE