- Add support second keyboard layout

- Update all translations

svn path=/trunk/; revision=33175
This commit is contained in:
Dmitry Chapyshev 2008-04-28 14:04:22 +00:00
parent dbe6f7e739
commit 67880e7352
19 changed files with 401 additions and 139 deletions

View file

@ -64,6 +64,7 @@ typedef enum
ERROR_WRITE_PTABLE,
ERROR_ADDING_CODEPAGE,
ERROR_UPDATE_LOCALESETTINGS,
ERROR_ADDING_KBLAYOUTS,
ERROR_LAST_ERROR_CODE
}ERROR_NUMBER;

View file

@ -3188,6 +3188,14 @@ RegistryPage(PINPUT_RECORD Ir)
return QUIT_PAGE;
}
/* Add keyboard layouts */
CONSOLE_SetStatusText(MUIGetString(STRING_ADDKBLAYOUTS));
if (!AddKeyboardLayouts())
{
MUIDisplayError(ERROR_ADDING_KBLAYOUTS, Ir, POPUP_WAIT_ENTER);
return QUIT_PAGE;
}
/* Update keyboard layout settings */
CONSOLE_SetStatusText(MUIGetString(STRING_KEYBOARDSETTINGSUPDATE));
if (!ProcessKeyboardLayoutRegistry(LayoutList))

View file

@ -1470,6 +1470,11 @@ MUI_ERROR bgBGErrorEntries[] =
"<EFBFBD>¥ãᯥ譮 ãáâ ­®¢ï¢ ­¥ ­  ¬¥á⭨⥠­ áâனª¨.\n"
"ENTER = <20>१ ¯ã᪠­¥ ­  ª®¬¯îâêà "
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1689,6 +1694,8 @@ MUI_STRING bgBGStrings[] =
"Œ<EFBFBD>"},
{STRING_GB,
"ƒ<EFBFBD>"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1467,6 +1467,11 @@ MUI_ERROR csCZErrorEntries[] =
"Nepodaýilo se nastavit mˇstnˇ nastavenˇ.\n"
"ENTER = Restartovat poźˇtaź"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1686,6 +1691,8 @@ MUI_STRING csCZStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR deDEErrorEntries[] =
"Setup konnte die Systemsprache nicht einstellen.\n"
"ENTER = Computer neustarten"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1680,6 +1685,8 @@ MUI_STRING deDEStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR elGRErrorEntries[] =
"Setup could not set the system locale.\n"
"ENTER = Reboot computer"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1680,6 +1685,8 @@ MUI_STRING elGRStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR enUSErrorEntries[] =
"Setup could not set the system locale.\n"
"ENTER = Reboot computer"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1680,6 +1685,8 @@ MUI_STRING enUSStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR esESErrorEntries[] =
"El instalador no pudo configurar el idioma del sistema.\n"
"ENTER = Reiniciar el equipo"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1679,6 +1684,8 @@ MUI_STRING esESStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1473,6 +1473,11 @@ MUI_ERROR frFRErrorEntries[] =
"Setup n'a pu changer la langue systŠme.\n"
"ENTER = Redmarrer l'ordinateur"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1692,6 +1697,8 @@ MUI_STRING frFRStrings[] =
"Mo"},
{STRING_GB,
"Go"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR itITErrorEntries[] =
"Setup non ha potuto impostare la regionalizzazione del sistema.\n"
"INVIO = Riavviare il computer"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1680,6 +1685,8 @@ MUI_STRING itITStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1470,6 +1470,11 @@ MUI_ERROR ltLTErrorEntries[] =
"Setup could not set the system locale.\n"
"ENTER = Reboot computer"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1689,6 +1694,8 @@ MUI_STRING ltLTStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1468,6 +1468,11 @@ MUI_ERROR plPLErrorEntries[] =
"Instalator nie m¢gˆ ustawi† wersji j©zykowej.\n"
"ENTER = Restart komputera"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1687,6 +1692,8 @@ MUI_STRING plPLStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR ruRUErrorEntries[] =
"<EFBFBD>¥ 㤠«®áì ãáâ ­®¢¨âì «®ª «ì á¨á⥬ë.\n"
"ENTER = <20>¥à¥§ £à㧪 "
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1680,6 +1685,8 @@ MUI_STRING ruRUStrings[] =
"Œ<EFBFBD>"},
{STRING_GB,
"ƒ<EFBFBD>"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1468,6 +1468,11 @@ MUI_ERROR skSKErrorEntries[] =
"Setup could not set the system locale.\n"
"ENTER = Reçtart poŸ¡taŸa"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1687,6 +1692,8 @@ MUI_STRING skSKStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR svSEErrorEntries[] =
"Setup could not set the system locale.\n"
"ENTER = Reboot computer"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1679,6 +1684,8 @@ MUI_STRING svSEStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -1461,6 +1461,11 @@ MUI_ERROR ukUAErrorEntries[] =
"Setup could not set the system locale.\n"
"ENTER = Reboot computer"
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
},
{
NULL,
NULL
@ -1680,6 +1685,8 @@ MUI_STRING ukUAStrings[] =
"MB"},
{STRING_GB,
"GB"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
{0, 0}
};

View file

@ -49,36 +49,36 @@
static const MUI_LANGUAGE LanguageList[] =
{
/* Lang ID, DefKbdLayout,ANSI CP, OEM CP, MAC CP, Language Name, page strgs,error strings, other strings */
{L"00000409", L"00000409", L"1252", L"437", L"10000", L"English", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000401", L"00000401", L"1256", L"720", L"10004", L"Arabic", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000402", L"00000402", L"1251", L"866", L"10007", L"Bulgarian", bgBGPages, bgBGErrorEntries, bgBGStrings },
{L"00000403", L"00000403", L"1252", L"850", L"10000", L"Catalan", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000804", L"00000804", L"936", L"936", L"10008", L"Chinese (PRC)", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000405", L"00000405", L"1250", L"852", L"10029", L"Czech", csCZPages, csCZErrorEntries, csCZStrings },
{L"00000406", L"00000406", L"1252", L"850", L"10000", L"Danish", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000407", L"00000407", L"1252", L"850", L"10000", L"Deutsch", deDEPages, deDEErrorEntries, deDEStrings },
{L"00000413", L"00000813", L"1252", L"850", L"10000", L"Dutch", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000040B", L"0000040B", L"1252", L"850", L"10000", L"Finnish", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000040C", L"0000040C", L"1252", L"850", L"10000", L"French", frFRPages, frFRErrorEntries, frFRStrings },
{L"00000408", L"00000408", L"1253", L"737", L"10006", L"Greek", elGRPages, elGRErrorEntries, elGRStrings },
{L"0000040D", L"0000040D", L"1255", L"862", L"10005", L"Hebrew", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000040E", L"0000040E", L"1250", L"852", L"10029", L"Hungarian", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000410", L"00000410", L"1252", L"850", L"10000", L"Italian", itITPages, itITErrorEntries, itITStrings },
{L"00000411", L"00000411", L"932", L"932", L"10001", L"Japanese", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000412", L"00000412", L"949", L"949", L"10003", L"Korean", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000427", L"00000427", L"1257", L"775", L"10029", L"Lithuanian", ltLTPages, ltLTErrorEntries, ltLTStrings },
{L"00000414", L"00000414", L"1252", L"850", L"10000", L"Norwegian", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000419", L"00000419", L"1251", L"866", L"10007", L"Russkij", ruRUPages, ruRUErrorEntries, ruRUStrings },
{L"0000041B", L"0000041B", L"1250", L"852", L"10029", L"Slovak", skSKPages, skSKErrorEntries, skSKStrings },
{L"0000040A", L"0000040A", L"1252", L"850", L"10000", L"Spanish", esESPages, esESErrorEntries, esESStrings },
{L"00000415", L"00000415", L"1250", L"852", L"10029", L"Polski", plPLPages, plPLErrorEntries, plPLStrings },
{L"00000816", L"00000816", L"1252", L"850", L"10000", L"Portuguese", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000041D", L"0000041D", L"1252", L"850", L"10000", L"Swedish", svSEPages, svSEErrorEntries, svSEStrings },
{L"0000041E", L"0000041E", L"874", L"874", L"10021", L"Thai", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000041F", L"0000041F", L"1254", L"857", L"10081", L"Turkish", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000422", L"00000422", L"1251", L"866", L"10017", L"Ukrainian", ukUAPages, ukUAErrorEntries, ukUAStrings },
{NULL, NULL, NULL, NULL, NULL}
/* Lang ID, DefKbdLayout, SecKbLayout, ANSI CP, OEM CP, MAC CP, Language Name, page strgs,error strings, other strings */
{L"00000409", L"00000409", NULL, L"1252", L"437", L"10000", L"English", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000401", L"00000401", L"00000409", L"1256", L"720", L"10004", L"Arabic", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000402", L"00000402", L"00000409", L"1251", L"866", L"10007", L"Bulgarian", bgBGPages, bgBGErrorEntries, bgBGStrings },
{L"00000403", L"00000403", L"00000409", L"1252", L"850", L"10000", L"Catalan", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000804", L"00000804", L"00000409", L"936", L"936", L"10008", L"Chinese (PRC)", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000405", L"00000405", L"00000409", L"1250", L"852", L"10029", L"Czech", csCZPages, csCZErrorEntries, csCZStrings },
{L"00000406", L"00000406", L"00000409", L"1252", L"850", L"10000", L"Danish", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000407", L"00000407", L"00000409", L"1252", L"850", L"10000", L"Deutsch", deDEPages, deDEErrorEntries, deDEStrings },
{L"00000413", L"00000813", L"00000409", L"1252", L"850", L"10000", L"Dutch", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000040B", L"0000040B", L"00000409", L"1252", L"850", L"10000", L"Finnish", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000040C", L"0000040C", L"00000409", L"1252", L"850", L"10000", L"French", frFRPages, frFRErrorEntries, frFRStrings },
{L"00000408", L"00000408", L"00000409", L"1253", L"737", L"10006", L"Greek", elGRPages, elGRErrorEntries, elGRStrings },
{L"0000040D", L"0000040D", L"00000409", L"1255", L"862", L"10005", L"Hebrew", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000040E", L"0000040E", L"00000409", L"1250", L"852", L"10029", L"Hungarian", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000410", L"00000410", L"00000409", L"1252", L"850", L"10000", L"Italian", itITPages, itITErrorEntries, itITStrings },
{L"00000411", L"00000411", L"00000409", L"932", L"932", L"10001", L"Japanese", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000412", L"00000412", L"00000409", L"949", L"949", L"10003", L"Korean", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000427", L"00000427", L"00000409", L"1257", L"775", L"10029", L"Lithuanian", ltLTPages, ltLTErrorEntries, ltLTStrings },
{L"00000414", L"00000414", L"00000409", L"1252", L"850", L"10000", L"Norwegian", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000419", L"00000419", L"00000409", L"1251", L"866", L"10007", L"Russkij", ruRUPages, ruRUErrorEntries, ruRUStrings },
{L"0000041B", L"0000041B", L"00000409", L"1250", L"852", L"10029", L"Slovak", skSKPages, skSKErrorEntries, skSKStrings },
{L"0000040A", L"0000040A", L"00000409", L"1252", L"850", L"10000", L"Spanish", esESPages, esESErrorEntries, esESStrings },
{L"00000415", L"00000415", L"00000409", L"1250", L"852", L"10029", L"Polski", plPLPages, plPLErrorEntries, plPLStrings },
{L"00000816", L"00000816", L"00000409", L"1252", L"850", L"10000", L"Portuguese", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000041D", L"0000041D", L"00000409", L"1252", L"850", L"10000", L"Swedish", svSEPages, svSEErrorEntries, svSEStrings },
{L"0000041E", L"0000041E", L"00000409", L"874", L"874", L"10021", L"Thai", enUSPages, enUSErrorEntries, enUSStrings },
{L"0000041F", L"0000041F", L"00000409", L"1254", L"857", L"10081", L"Turkish", enUSPages, enUSErrorEntries, enUSStrings },
{L"00000422", L"00000422", L"00000409", L"1251", L"866", L"10017", L"Ukrainian", ukUAPages, ukUAErrorEntries, ukUAStrings },
{NULL, NULL, NULL, NULL, NULL, NULL}
};
extern
@ -249,6 +249,132 @@ MUIGetString(ULONG Number)
return "<nostring>";
}
static BOOLEAN
AddKbLayoutsToRegistry(IN LPCWSTR DefKbLayout, IN LPCWSTR SecKbLayout)
{
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING KeyName;
UNICODE_STRING ValueName;
HANDLE KeyHandle;
NTSTATUS Status;
ULONG Disposition;
WCHAR szKeyName[48] = L"\\Registry\\User\\.DEFAULT\\Keyboard Layout";
// Open the keyboard layout key
RtlInitUnicodeString(&KeyName,
szKeyName);
InitializeObjectAttributes(&ObjectAttributes,
&KeyName,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
Status = NtCreateKey(&KeyHandle,
KEY_ALL_ACCESS,
&ObjectAttributes,
0,
NULL,
0,
&Disposition);
if(NT_SUCCESS(Status))
NtClose(KeyHandle);
else
{
DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
return FALSE;
}
KeyName.MaximumLength = sizeof(szKeyName);
Status = RtlAppendUnicodeToString(&KeyName, L"\\Preload");
if(!NT_SUCCESS(Status))
{
DPRINT1("RtlAppend failed! (%lx)\n", Status);
DPRINT1("String is %wZ\n", &KeyName);
return FALSE;
}
InitializeObjectAttributes(&ObjectAttributes,
&KeyName,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
Status = NtCreateKey(&KeyHandle,
KEY_ALL_ACCESS,
&ObjectAttributes,
0,
NULL,
0,
&Disposition);
if (!NT_SUCCESS(Status))
{
DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
return FALSE;
}
/* Set def keyboard layout */
RtlInitUnicodeString(&ValueName,
L"1");
Status = NtSetValueKey(KeyHandle,
&ValueName,
0,
REG_SZ,
(PVOID)DefKbLayout,
(8 + 1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
NtClose(KeyHandle);
return FALSE;
}
if (SecKbLayout != NULL)
{
/* Set second keyboard layout */
RtlInitUnicodeString(&ValueName,
L"2");
Status = NtSetValueKey(KeyHandle,
&ValueName,
0,
REG_SZ,
(PVOID)SecKbLayout,
(8 + 1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
NtClose(KeyHandle);
return FALSE;
}
}
NtClose(KeyHandle);
return TRUE;
}
BOOLEAN
AddKeyboardLayouts(VOID)
{
ULONG lngIndex = 0;
do
{
if (_wcsicmp(LanguageList[lngIndex].LanguageID , SelectedLanguageId) == 0)
{
return AddKbLayoutsToRegistry(LanguageList[lngIndex].LanguageKeyboardLayoutID,
LanguageList[lngIndex].SecondLangKbLayoutID);
}
lngIndex++;
}
while (LanguageList[lngIndex].MuiPages != NULL);
return FALSE;
}
static BOOLEAN
AddCodepageToRegistry(IN LPCWSTR ACPage, IN LPCWSTR OEMCPage, IN LPCWSTR MACCPage)
{

View file

@ -31,6 +31,7 @@ typedef struct
{
PWCHAR LanguageID;
PWCHAR LanguageKeyboardLayoutID;
PWCHAR SecondLangKbLayoutID;
PWCHAR ACPage;
PWCHAR OEMCPage;
PWCHAR MACCPage;
@ -52,65 +53,69 @@ MUIDefaultKeyboardLayout(VOID);
BOOLEAN
AddCodePage(VOID);
BOOLEAN
AddKeyboardLayouts(VOID);
VOID
SetConsoleCodePage(VOID);
LPSTR
MUIGetString(ULONG Number);
#define STRING_PLEASEWAIT 1
#define STRING_INSTALLCREATEPARTITION 2
#define STRING_INSTALLDELETEPARTITION 3
#define STRING_PARTITIONSIZE 4
#define STRING_CHOOSENEWPARTITION 5
#define STRING_HDDSIZE 6
#define STRING_CREATEPARTITION 7
#define STRING_PARTFORMAT 8
#define STRING_NONFORMATTEDPART 9
#define STRING_INSTALLONPART 10
#define STRING_CHECKINGPART 11
#define STRING_QUITCONTINUE 12
#define STRING_REBOOTCOMPUTER 13
#define STRING_TXTSETUPFAILED 14
#define STRING_COPYING 15
#define STRING_SETUPCOPYINGFILES 16
#define STRING_PAGEDMEM 17
#define STRING_NONPAGEDMEM 18
#define STRING_FREEMEM 19
#define STRING_REGHIVEUPDATE 20
#define STRING_IMPORTFILE 21
#define STRING_DISPLAYETTINGSUPDATE 22
#define STRING_LOCALESETTINGSUPDATE 23
#define STRING_KEYBOARDSETTINGSUPDATE 24
#define STRING_CODEPAGEINFOUPDATE 25
#define STRING_DONE 26
#define STRING_REBOOTCOMPUTER2 27
#define STRING_CONSOLEFAIL1 28
#define STRING_CONSOLEFAIL2 29
#define STRING_CONSOLEFAIL3 30
#define STRING_FORMATTINGDISK 31
#define STRING_CHECKINGDISK 32
#define STRING_FORMATDISK1 33
#define STRING_FORMATDISK2 34
#define STRING_KEEPFORMAT 35
#define STRING_HDINFOPARTCREATE 36
#define STRING_HDDINFOUNK1 37
#define STRING_HDDINFOUNK2 38
#define STRING_HDINFOPARTDELETE 39
#define STRING_HDDINFOUNK3 40
#define STRING_HDINFOPARTZEROED 41
#define STRING_HDDINFOUNK4 42
#define STRING_HDINFOPARTEXISTS 43
#define STRING_HDDINFOUNK5 44
#define STRING_HDINFOPARTSELECT 45
#define STRING_HDDINFOUNK6 46
#define STRING_NEWPARTITION 47
#define STRING_UNPSPACE 48
#define STRING_MAXSIZE 49
#define STRING_UNFORMATTED 50
#define STRING_FORMATUNUSED 51
#define STRING_FORMATUNKNOWN 52
#define STRING_KB 53
#define STRING_MB 54
#define STRING_GB 55
#define STRING_PLEASEWAIT 1
#define STRING_INSTALLCREATEPARTITION 2
#define STRING_INSTALLDELETEPARTITION 3
#define STRING_PARTITIONSIZE 4
#define STRING_CHOOSENEWPARTITION 5
#define STRING_HDDSIZE 6
#define STRING_CREATEPARTITION 7
#define STRING_PARTFORMAT 8
#define STRING_NONFORMATTEDPART 9
#define STRING_INSTALLONPART 10
#define STRING_CHECKINGPART 11
#define STRING_QUITCONTINUE 12
#define STRING_REBOOTCOMPUTER 13
#define STRING_TXTSETUPFAILED 14
#define STRING_COPYING 15
#define STRING_SETUPCOPYINGFILES 16
#define STRING_PAGEDMEM 17
#define STRING_NONPAGEDMEM 18
#define STRING_FREEMEM 19
#define STRING_REGHIVEUPDATE 20
#define STRING_IMPORTFILE 21
#define STRING_DISPLAYETTINGSUPDATE 22
#define STRING_LOCALESETTINGSUPDATE 23
#define STRING_KEYBOARDSETTINGSUPDATE 24
#define STRING_CODEPAGEINFOUPDATE 25
#define STRING_DONE 26
#define STRING_REBOOTCOMPUTER2 27
#define STRING_CONSOLEFAIL1 28
#define STRING_CONSOLEFAIL2 29
#define STRING_CONSOLEFAIL3 30
#define STRING_FORMATTINGDISK 31
#define STRING_CHECKINGDISK 32
#define STRING_FORMATDISK1 33
#define STRING_FORMATDISK2 34
#define STRING_KEEPFORMAT 35
#define STRING_HDINFOPARTCREATE 36
#define STRING_HDDINFOUNK1 37
#define STRING_HDDINFOUNK2 38
#define STRING_HDINFOPARTDELETE 39
#define STRING_HDDINFOUNK3 40
#define STRING_HDINFOPARTZEROED 41
#define STRING_HDDINFOUNK4 42
#define STRING_HDINFOPARTEXISTS 43
#define STRING_HDDINFOUNK5 44
#define STRING_HDINFOPARTSELECT 45
#define STRING_HDDINFOUNK6 46
#define STRING_NEWPARTITION 47
#define STRING_UNPSPACE 48
#define STRING_MAXSIZE 49
#define STRING_UNFORMATTED 50
#define STRING_FORMATUNUSED 51
#define STRING_FORMATUNKNOWN 52
#define STRING_KB 53
#define STRING_MB 54
#define STRING_GB 55
#define STRING_ADDKBLAYOUTS 56
#endif

View file

@ -868,13 +868,14 @@ ProcessKeyboardLayoutRegistry(PGENERIC_LIST List)
{
PGENERIC_LIST_ENTRY Entry;
PWCHAR LanguageId;
WCHAR CurrentLangId[8 + 1];
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING KeyName;
UNICODE_STRING ValueName;
ULONG Disposition;
ULONG ResLength, Length;
HANDLE KeyHandle;
NTSTATUS Status;
WCHAR szKeyName[48] = L"\\Registry\\User\\.DEFAULT\\Keyboard Layout"; // 48 = "\Registry\User\.DEFAULT\Keyboard Layout\Preload" + NULL char
PKEY_VALUE_PARTIAL_INFORMATION ValueInfo;
Entry = GetGenericListEntry(List);
if (Entry == NULL)
@ -884,8 +885,7 @@ ProcessKeyboardLayoutRegistry(PGENERIC_LIST List)
if (LanguageId == NULL)
return FALSE;
// First create the "Keyboard Layout" key
RtlInitUnicodeString(&KeyName, szKeyName);
RtlInitUnicodeString(&KeyName, L"\\Registry\\User\\.DEFAULT\\Keyboard Layout\\Preload");
InitializeObjectAttributes(&ObjectAttributes,
&KeyName,
@ -893,70 +893,94 @@ ProcessKeyboardLayoutRegistry(PGENERIC_LIST List)
NULL,
NULL);
Status = NtCreateKey(&KeyHandle,
KEY_ALL_ACCESS,
&ObjectAttributes,
0,
NULL,
0,
&Disposition);
if(NT_SUCCESS(Status))
NtClose(KeyHandle);
else
{
DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
return FALSE;
}
// Then create the "Preload" key
KeyName.MaximumLength = sizeof(szKeyName);
Status = RtlAppendUnicodeToString(&KeyName, L"\\Preload");
Status = NtOpenKey(&KeyHandle,
KEY_ALL_ACCESS,
&ObjectAttributes);
if(!NT_SUCCESS(Status))
{
DPRINT1("RtlAppend failed! (%lx)\n", Status);
DPRINT1("String is %wZ\n", &KeyName);
DPRINT1("NtOpenKey() failed (Status %lx)\n", Status);
NtClose(KeyHandle);
return FALSE;
}
InitializeObjectAttributes(&ObjectAttributes,
&KeyName,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
Status = NtCreateKey(&KeyHandle,
KEY_ALL_ACCESS,
&ObjectAttributes,
0,
NULL,
0,
&Disposition);
if (!NT_SUCCESS(Status))
{
DPRINT1("NtCreateKey() failed (Status %lx)\n", Status);
return FALSE;
}
/* Set default keyboard layout */
/* Get current keyboard layout */
RtlInitUnicodeString(&ValueName,
L"1");
Status = NtSetValueKey(KeyHandle,
&ValueName,
0,
REG_SZ,
(PVOID)LanguageId,
(8 + 1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
Length = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + (8 + 1) * sizeof(WCHAR);
ValueInfo = (KEY_VALUE_PARTIAL_INFORMATION*) RtlAllocateHeap(RtlGetProcessHeap(),
0,
Length);
if (ValueInfo == NULL)
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
DPRINT("RtlAllocateHeap() failed\n");
NtClose(KeyHandle);
return FALSE;
}
Status = NtQueryValueKey(KeyHandle,
&ValueName,
KeyValuePartialInformation,
ValueInfo,
Length,
&ResLength);
if (!NT_SUCCESS(Status))
{
DPRINT1("NtQueryValueKey() failed (Status %lx)\n", Status);
NtClose(KeyHandle);
return FALSE;
}
RtlCopyMemory(CurrentLangId,
ValueInfo->Data,
(8 + 1) * sizeof(WCHAR));
CurrentLangId[8 + 1] = 0;
RtlFreeHeap(RtlGetProcessHeap(),
0,
ValueInfo);
if (wcscmp(CurrentLangId, LanguageId) != 0)
{
RtlInitUnicodeString(&ValueName,
L"1");
Status = NtSetValueKey(KeyHandle,
&ValueName,
0,
REG_SZ,
(PVOID)LanguageId,
(8 + 1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
NtClose(KeyHandle);
return FALSE;
}
RtlInitUnicodeString(&ValueName,
L"2");
Status = NtSetValueKey(KeyHandle,
&ValueName,
0,
REG_SZ,
(PVOID)CurrentLangId,
(8 + 1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status);
NtClose(KeyHandle);
return FALSE;
}
}
NtClose(KeyHandle);
return TRUE;