From KLID to GUID (aka KLIDoral stimulation, it feels GUID)

by Michael S. Kaplan, published on 2009/09/15 10:01 -04:00, original URI: http://blogs.msdn.com/b/michkap/archive/2009/09/15/9894707.aspx


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.

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!


# ray on 15 Sep 2009 10:01 PM:

Consider your pun license revoked.

# Michael S. Kaplan on 17 Sep 2009 1:42 AM:

With this Blog, it has been revoked for over 2 years now. I now pun without a license....

# JJ on 29 Sep 2009 8:02 PM:

Don't be silly.  Aardvarkian programmers never pun.  They 'cant'.

Carlos on 30 Jan 2010 4:45 PM:

I followed the directions and included this on my unattend.xml:

At the "<settings pass="oobeSystem">"

"<InputLocale>"0409:00000409;0409:00020409;0c0a:0000040a;0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{F3BA9077-6C7E-11D4-97FA-0080C882687E};0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{761309DE-317A-11D4-9B5D-0080C882687E};0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}"</InputLocale>"

After sysprep, the only one I get is English-US. When I try with all the XP codes (0409:00000409;0409:00020409;0c0a:0000040a;0804:00000804;0804:e00e0804;0404:00000404;0404:e0010404;0411:00000411;0411:e0010411) I get only en-US, US-Int, es-ES, zh-CH (US Keyboard), zh-TW (US Keyboard) and jp-JP (US Keyboard).

Am I missing something here?

Thank you,

Carlos

mrtech86 on 27 Aug 2012 10:54 AM:

This worked perfectly for my project. Thank you!


referenced by

2012/08/28 'If it is easy, then there are samples. And if it's very easy, everyone is writing them.'

go to newer or older post, or back to index or month or day