Tuesday, September 15, 2009 7:01 AM
Michael S. Kaplan
From KLID to GUID (aka KLIDoral stimulation, it feels GUID)
Apologies for the title (note to self: never author blog titles under the influence to try to appear as a cunning linguist!)
So it was just the other day that Yong asked:
Ok, so it looks like we got a regression (or a design change) on Vista/Windows 7 from Windows XP.
On XP/W2K3:
============Start of regopts.txt============
[RegionalSettings]
InputLocale = 0409:00000409,0404:E0020404
============End of regopts.txt============
// Just having this adds for example the Chinese Traditional (ChangJie) keyboard.
On Windows Vista SP2/W2K8 SP2
============Start of regopts.xml============
<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<!-- User List-->
<gs:UserList>
<gs:User UserID="Current" CopySettingsToSystemAcct="true" />
</gs:UserList>
<!--System locale-->
<gs:SystemLocale Name="zh-TW"/>
<gs:InputPreferences>
<!--en-US-->
<gs:InputLanguageID Action="add" ID="0409:00000409" Default="true"/>
<!--zh-TW-ChangJie-->
<gs:InputLanguageID Action="add" ID="0404:E0020404"/>
</gs:InputPreferences>
</gs:GlobalizationServices>
============End of regopts.xml============
It fails with:
Unexpected Failure. Unsupported parameter.
On Windows 7/W2K8 R2.
It fails with:
Event ID: 10008
Source: International
Error while changing keyboard/input method for "0404:E0020404".
This is one of those architected backcompat breaks that was put in -- GUIDs were now needed, to replace the "fake" KLID values of prior versions that would forward to the appropriate Text Services Framework TIPs (which had been around for several versions, often atop the same KLID values that the older IMM based variants of IME that they replaced used to be on).
It amazed me that after all this time no one had still seemed to have published the list of the GUIDs so that people could replace existing scripts!
In fact, no one had asked me if such a list existed, really.
Which is odd since that is the sort of question I do tend to get a lot.
Anyway, I thought I would just take care of that now.
Here is the big table, with the old and new values:
| LANGID |
XP/Server 2003 KLID |
Language/Script |
Input method description |
Vista/Windows 7 |
| 0411 |
00000411 |
Japanese |
Japanese keyboard |
No Change |
| 0411 |
E0010411 |
Japanese |
Japanese IME |
{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76} |
| 0412 |
E0010412 |
Korean |
Korean IME |
{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1} |
| 0412 |
00000412 |
Korean |
Korean keyboard |
No Change |
| 0404 |
00000404 |
Traditional Chinese |
US Keyboard |
No Change |
| 0804 |
00000804 |
Simplified Chinese |
US Keyboard |
No Change |
| 0404 |
E0010404 |
Traditional Chinese |
Phonetic |
{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{761309DE-317A-11D4-9B5D-0080C882687E} |
| 0804 |
E0010804 |
Simplified Chinese |
QuanPin |
{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{54FC610E-6ABD-4685-9DDD-A130BDF1B170} |
| 0404 |
E0020404 |
Traditional Chinese |
ChangJie |
{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{4BDF9F03-C7D3-11D4-B2AB-0080C882687E} |
| 0804 |
E0020804 |
Simplified Chinese |
ShuangPin |
{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{EF63706D-31C4-490E-9DBB-BD150ADC454B} |
| 0404 |
E0030404 |
Traditional Chinese |
Quick |
{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{6024B45F-5C54-11D4-B921-0080C882687E} |
| 0404 |
Did not exist?!? |
Traditional Chinese |
New Quick |
{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{0B883BA0-C1C7-11D4-87F9-0080C882687E} |
| 0804 |
E0030804 |
Simplified Chinese |
ZhengMa |
{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{733B4D81-3BC3-4132-B91A-E9CDD5E2BFC9} |
| 0404 |
E0040404 |
Traditional Chinese |
Big5 |
REMOVED |
| 0404 |
E0050404 |
Traditional Chinese |
Array |
{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{D38EFF65-AA46-4FD5-91A7-67845FB02F5B} |
| 0804 |
E0050804 |
Simplified Chinese |
NeiMa |
REMOVED |
| 0404 |
E0060404 |
Traditional Chinese |
DaYi |
{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{037B2C25-480C-4D7F-B027-D6CA6B69788A} |
| 0404 |
E0070404 |
Traditional Chinese |
Unicode |
REMOVED |
| 0404 |
e0080404 |
Traditional Chinese |
New Phonetic |
{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{B2F9C502-1742-11D4-9790-0080C882687E} |
| 0404 |
e0090404 |
Traditional Chinese |
New ChangJie |
{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{F3BA907A-6C7E-11D4-97FA-0080C882687E} |
| 0804 |
E00E0804 |
Simplified Chinese |
PinYin |
{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{F3BA9077-6C7E-11D4-97FA-0080C882687E} |
| 0404 |
E01F0404 |
Traditional Chinese |
Alphanumeric (ABC) |
{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{FCA121D2-8C6D-41fb-B2DE-A2AD110D4820} |
A few quick words about this table.
- Yes, the three input methods based on having a code point (Big5, NeiMa, and Unicode) were removed;
- And yes, the four keyboards stay in as they were in prior methods, unchanged;
- The rest of the input methods are now associated with two different GUID values -- the first identifying the TIP engine and the second identifying the language profile under that TIP engine.
Note that this information is mostly useless to you but does explain why all of the IMEs that use TextTableService.DLL have the same GUID for the first one -- you can use this imnformation to sound particularly impressive at a client site, by the way. :-)
The two GUIDs are used the same way that the KLID values used to be used. Thus for Yong's case,
0404:E0020404
becomes
0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{4BDF9F03-C7D3-11D4-B2AB-0080C882687E}
Anyway, sorry I never printed this list before; I did mean to but never got around to it. And then I forgot. :-(
Hopefully this will be of user to people, going forward!