멀티프로그래밍 위키로 바로가기 → http://www.devnote.net/wiki
이전에 비스타에서 Legacy IME를 사용하는 법에 관해 설명하였습니다. 비스타의 TSF 입력기의 호환성 문제 때문에 한글과 일본, 중국어 입력에 심각한 문제를 겪고 있는 사람들을 위해 한글 입력기를 포함한, 아시아 국가들의 기존 legacy IME를 간단하게 설치하는 방법을 알아보겠습니다.

전에 설명한 바와 같이 비스타에는 이전 IME 파일은 그대로 존재 하지만, 레지스트리에서만 제거 되었습니다. 아래 첨부된 레지스트리 파일은 비스타에 포함된 모든 아시아권 IME를 사용 가능하게 해줍니다. 이 파일은 HKLM의 키보드 레이아웃 시스템 레지스트리를 바꾸므로 관리자(administrator) 권한을 필요로 합니다. 이 파일에 특별히 시스템 보안에 문제되는 내용은 없다. 그러나, 보안을 조금 이라도 염려하는 사용자라면, 곧바로 실행하지 말고, 디스크에 저장한 후 내용을 살펴보고 실행하시기 바랍니다.


OldImeKL.reg

비스타에서 이전 legacy IME를 추가하는 레지스트리 파일


위의 레지스트리 등록이 끝나면, 입력도구의 등록정보에서 아래와 같이 이전 IME가 추가되어 있음을 알 수 있습니다. 빨간 상자에 있는 것들이 이전 IME들 입니다.

한국어의 경우 한글 MS-IME2002를 기본(default) IME로 선택하시기 바랍니다. (아래 스크린캡쳐는 영문 비스타에서 얻은 것입니다). 이렇게 설정을 바꾼 후에 시스템 리부팅은 필요 없으며, 이 후에 실행되는 어플리케이션은 자동으로 IME2002를 사용하게됩니다.

이전 Legacy IME 레지스트리 입력 후 입력기 설정 화면

크리에이티브 커먼즈 라이센스
Creative Commons License

오늘 TSF (Text Service Framework)를 지원하는 Application을 개발하는데 있어, 디버깅 하는데  큰 문제가 있음을 알아 냈습니다.

먼저 자세한 설명을 하기 전에 증상부터 알아 봅시다. 아래 소스는 Vista SDK에 TSF 예제로 포함된, TSFAPP의 TEXTSTOR.CPP의 일부입니다. InsertTextAtSelection 함수는 새로운 글자가 입력될 때 마다 호출되는 함수입니다. 함수 시작 부분에 메모리 주소 0 에 쓰기를 시도하여 Access Violation을 유발 시켜보았습니다. 이것은 심각한 버그가 있는 것을 시뮬레이션 하는 것입니다.


/**************************************************************************

  CTSFEditWnd::InsertTextAtSelection()

**************************************************************************/

STDMETHODIMP CTSFEditWnd::InsertTextAtSelection(    DWORD dwFlags,
                                                   const WCHAR *pwszText,
                                                   ULONG cch,
                                                   LONG *pacpStart,
                                                   LONG *pacpEnd,
                                                   TS_TEXTCHANGE *pChange)
{
  OutputDebugString(TEXT("CTSFEditWnd::InsertTextAtSelection \n"));

  *(int *) 0 = 0;  // <-- Access Violation 유발


이제 TSFAPP.EXE를 컴파일시켜, 한글을 입력해 봅시다.  그런데,  예상과 달리 이 어플리케이션은 크래시되지도 않고 우리가 흔히 보는 윈도우즈 에러 리포트 다이얼로그도 나타나지 않습니다. 단지 원하는 한글 입력은  되지 않습니다. 이것이 왜 디버깅에 문제가 되는 지, 아마 어느 정도 짐작하였을 것입니다. 어플리케이션이 제공하는 TSF 인터페이스 내부에, 아무리 심각한 버그가 있어도 프로그램이 죽거나 에러를 리포트하지 않는다는 것입니다.  이유는 무엇일까요? 다름 아닌 윈도우즈의 TSF입력 지원 모듈이 자체 예외처리기를 가지고 있기 때문입니다.

따라서, 디버거를 처음에 attach시켜 프로그램을 실행하지 않는 한, access violation과 같은 심각한  버그가 있어도, 어느 순간 입력에 이상이 생기는 현상만 나타나며, 원인을 알아내기 어렵다는 점 입니다. 특히 어플리케이션이 자체 예외처리기(SEH)를 가지고 콜스택을 로그파일로 만들거나 덤프파일을 만드는 것이 불가능해 집니다. 따라서, 어플리케이션 버그로 인한 입력 문제가 발생함에도 불구하고 사용자나 개발자는 OS에 문제가 있는 것으로 오인할 가능성도 많습니다.

윈도우 TSF 모듈이 자체 예외처리기를 가지는 것을 확인하기 위해서, 우선 위에서 만든 TSFAPP.EXE를 실행해 봅시다. 그리고 VS에서 Attach to Process를 선택하거나, 이 프로세스의 ID를 알아낸 다음, "ntsd -p <프로세스 ID>"와 같이 커맨드라인 디버거를 이용하여 디버거를 attch 합니다. 이제 한글을 입력하려고 하면 디버거에서 이 메모리 오류(Access Violation)을 캐치함을 알 수 있습니다. 이것은 First chance exception 입니다. 여기서 다시 계속 진행시키기 위해 디버거에서 "go"를 선택하면, 아래와 같은 콜스택을 볼 수 있습니다.

TSF 핵심 모듈인 MSCTF.DLL이 자체 exception handler를 가지고 있는 것을 알 수 있다. 여기서 다시 "go"를 하면 프로그램은 종료되지 않고 계속 실행된다.

여기서 CicExceptionFilter가 EXCEPTION_EXECUTE_HANDLER 값을 리턴하는 것을 짐작할 수 있습니다. 즉, MSCTF 자체 예외처리기에 걸리면 다른 SEH는 이것을 알지 못합니다.  내가 아무리 최고의 unhandled exception handler를 가지고 있다 해도 무용지물입니다. 여기서 한가지 해결책은 XP이후부터 지원되는 Vectored Exception Handler를 사용하는 것입니다.


0012f434 77999b31 ntdll!DbgBreakPoint
0012f46c 77999b94 ntdll!RtlUnhandledExceptionFilter2+0x2a4
0012f47c 767ec8f5 ntdll!RtlUnhandledExceptionFilter+0x12
0012f488 767dc902 MSCTF!CicExceptionFilter+0xe
0012f490 7672669b MSCTF!CInputContext::_DoEditSession+0x49
0012f4a4 76726620 msvcrt!_EH4_CallFilterFunc+0x12
0012f4d0 76812a3b msvcrt!_except_handler4_common+0x8e
0012f4f0 77951039 MSCTF!_except_handler4+0x20
0012f514 7795100b ntdll!ExecuteHandler2+0x26
0012f5bc 77950e97 ntdll!ExecuteHandler+0x24
0012f5bc 00402a26 ntdll!KiUserExceptionDispatcher+0xf
0012f8d0 76803991 TSFApp!CTSFEditWnd::InsertTextAtSelection+0x6
0012f90c 767ee809 MSCTF!CACPWrap::InsertTextAtSelection+0x38

0:000> uf MSCTF!CicExceptionFilter
MSCTF!CicExceptionFilter:
77bbc8e7 mov     edi,edi
77bbc8e9 push    ebp
77bbc8ea mov     ebp,esp
77bbc8ec push    dword ptr [ebp+8]
77bbc8ef call    dword ptr [MSCTF!_imp__RtlUnhandledExceptionFilter (77b811d8)]
77bbc8f5 xor     eax,eax
77bbc8f7 inc     eax => retrun
EXCEPTION_EXECUTE_HANDLER
77bbc8f8 pop     ebp
77bbc8f9 ret     4




그런데, 왜 MSCTF는 Access Violation과 같은 심각한 예외상황을 무시하고 지나가도록 한 것일까? MSCTF가 모든 경우 자체 예외 처리를 통해 이런 심각한 예외를 무시하도록 하고 있지는 않다. 간단한 예로 InsertTextAtSelection가 아닌 다른 함수들 안에서 잘못된 메모리 참조하면 정상적으로 프로그램이 종료되고, 윈도우즈 오류 리포팅과 같은 Post Mortem Debugger가 실행된다. 이유는 좀 황당하지만 이렇다.

MS 내부에서 TSF를 지원하는 어플리케이션과 입력기들이 많이 개발되었고, 어플리케이션 혹은 입력기들의 자체 버그로 인해 중요 어플리케이션이 종료되는 현상이 자주 나타나자, TSF 팀은 많이 사용되는 Callback 함수들을 아예 자체 예외처리기로 묶어서 심각한 문제가 발생해도 어플리케이션을 죽이지 않고, 현재 입력만을 취소한 채로 계속 수행되도록 만든 것이다.

특히 TSF의 내부 구조의 복잡성으로 인해, 사소하고 미묘한 문제가 어플리케이션을 죽이는 상황으로 쉽게 니티나기 시작하였다. TSF 팀은 이들 입력기를 개발한 팀에 수정을 요구하기 보다는 자체적으로 이러한 버그를 피해가는 방법을 선택하였다. (많은 종류의 어플리케이션들이 TSF를 잘못 사용하여 문제를 일으켰기 때문일 것이다)

어플리케이션이 죽지 않아 입력된 데이터의 손실은 막을 수 있겠으나, 이로인한 부작용은 앞서 설명한 바와 같이 TSF를 사용하는 어플리케이션이나 입력기의 심각한 문제를 발견하기 어렵게 되었을 뿐 아니라, 입력 중인 글자가 취소되거나 한영 변환이 되지 않는 등 가끔 매우 이상한 현상이 감지될 수 있다.

TSF 어플리케이션을 제작할 때 입력에 문제가 발생한다면, 디버거를 attach시키고 실행하여야만 access violation과 같은 심각한 버그가 숨어 있음을 알 수 있다.



크리에이티브 커먼즈 라이센스
Creative Commons License

비스타는 TSF (Text Service Framework)을 이용한 입력을 기본으로하여 기존 IME는 더 이상 사용하지 않는다. 그런데 흥미롭게도 기존 IME파일은 그대로 남겨두었다.

아래와 같이 %WINDIR%\system32 폴더에 *.IME 파일들이 존재한다. 다만, 이들은 레지스트리에서 제거되어 기본적으로 사용되지 않을 뿐이다. 게다가 이들은 XP에 들어 있는 IME보다 모두 버전업된 것 들이다. 기존 IME 지원 코드가 여전히 남아 있는 가장 큰 이유는 서드파티 IME들 때문일 것이다. 일본이나 중국의 경우 서드파티 IME들이 상당히 많이 존재하며. 이들이 TSF를 지원하기 위해 코드변경을 하는 것은 상당한 작업이기 때문에 기존 IME지원 코드를 그대로 남겨둔 것으로 보인다.

그렇다 해도 MS IME 파일들을 그대로 남겨두고 레지스트리에 추가하지 않아 사용하지 못하게 한 것은 어쨋든 좀 이상하다. 어쩌면 비스타의 기본 입력시스템인 TSF가 불안할 경우, 기존의 IME를 다시 사용할 수 있는 방법을 남겨두었는지도 모른다.

dir %WINDIR%\system32\*.ime

11/02/2006  02:39 AM           124,928 chajei.ime
11/02/2006  02:39 AM           124,928 cintlgnt.ime
11/02/2006  02:39 AM           881,152 IMJP10.IME
11/02/2006  02:39 AM           412,160 imkr80.ime
11/02/2006  02:40 AM             7,168 msctfime.ime
11/02/2006  02:39 AM           124,928 phon.ime
11/02/2006  02:39 AM            88,576 pintlgnt.ime
11/02/2006  02:39 AM           124,928 qintlgnt.ime
11/02/2006  02:39 AM           124,928 quick.ime
11/02/2006  02:39 AM           125,440 tintlgnt.ime

TSF는 코드네임 Cicero로 1990년대 말부터 시작된 프로젝트이다. COM인터페이스를 기본으로 설계된 TSF는 기존 IME와의 호환성을 위해 CUAS (Cicero Unaware Application Support)를 구현하였다. 하지만, CUAS가 100% 완벽한 호환성을 지원하지 못하기 때문에 여러 어플리케이션에서 문제가 발생할 수 있다. 기본적으로 TSF만을 지원하는 비스타이지만, 실제로는 모든 기존 IME지원 파일들이 존재하기 때문에, 기존 IME를 쉽게 재설치 가능하다. 특히, 이는 TSF와 문제를 일으키는 어플리케이션을 사용해야만 하는 경우 유용한 팁이 될 수 있다.

그럼 이들을 비스타에서 사용하려면 어떻게 하면 될까? 아래 reg파일과 같이 HKLM에 IME를 등록해주면, 기존 IME의 추가가 가능해진다. (여기서는 한글 IME의 예를 들은 것이고, 다른 언어 IME의 경우도 WIn XP의 레지스트리를 참고하여 같은 방법으로 비스타에서 문제없이 사용할 수 있다)

http://www.devnote.net/45 에 모든 아시아권 legacy IME를 포함하는 레지스트리 파일을 올려 놓았음

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\E0010412]
"Layout File"="KBDKOR.DLL"
"Layout Text"="Korean Input System (IME 2002)"
"IME file"="imkr80.ime"
"Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5064"


추가된 IME는 입력도구모음 윈도우에서 선택하여 사용 가능한데 아직 기본으로 설정되어 있지는 않다. 등록정보 UI에서는 기존 IME를 기본으로 설정할 수 있다.  기존 IME를 기본으로 하면 아래 HKCU의 Preload를 변경하면된다. 여기서 E0010412는 한글 입력기의 HKL 핸들값으로 위에 HKLM서 추가된 값이다. 00000412는 TSF 입력기이다. 따라서, IME가 기본으로 나타나게되며 TSF 한글 입력기를 사용하기 원하면, 언어입력도구 상자의 아이콘을 클릭하여 변경할 수 있다.


HKL은 Keyboard Layout Handle이다. HKL 값에 대해 조금 더 자세히 알아보면, IME일 경우 최상위 세비트가 항상 1 이되어 "0xE00N0LLL"와 같은 형태가 되고 IME가 아닌 키보드 드라이버일 경우는 "0x000N0LLL" 형태가 된다. 여기서 N은 일련번호 (1부터 시작) 이며 LLL은 LCID (Locale ID)이다. 한글의 경우는 LLL은 412 (16진수) 가 된다.

윈도우즈에 설치된 모든 키보드 드라이버와 IME는 다음 레지스트리 아래에서 찾을 수 있다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

또 이들 중에 각각의 사용자들에게 설치된 IME는 아래 HKCU 아래 있다. 숫자 일련번호에 따라 "1" 이 기본 IME혹은 키보드 드라이버이다

HKEY_CURRENT_USER\Keyboard Layout\Preload


Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Keyboard Layout\Preload]
"1"="e0010412"
"2"="00000412"

마이크로소프는 비스타에서 음성인식 지원을 가장 큰 기능 향상 중의 하나로 선전하였다. (음성인식은 XP에도 있었으나 비스타에서 UI가 많이 향상되었다). 하지만, 안타깝게도 한국어 음성인식이 지원되지 않는다. (일본어, 중국어 음성인식은 지원된다). 따라서, 비스타의 TSF를 통해 당장 얻어지는 잇점 이라면 단어 단위의 한글/한자 변환과 사용자 정의 한자 사전일 것이다. 하지만, 이러한 기능을 사용하지 않는다면 기존 (legacy) IME를 사용하는 데 아무런 문제가 없다. 기존 IME는 TSF IME에 비해 메모리도 100 KB이상 덜 사용하며, 전에 언급한 바와 같이 복잡한 함수 호출이 없어 속도도 빠르다. 호환성에 있어서도 물론 기존 IME가 우수하다.

그렇다고 앞으로 계속 기존 IME 쓸 수는 없을 것이다. 비록 비스타에서 IME 파일을 남겨 두었으나, 다음 윈도우즈 버전에서는 IME를 영원히 삭제하게 될 것으로 예상되기 때문이다.
크리에이티브 커먼즈 라이센스
Creative Commons License

드디어 그동안 작업하던 TSF(Text Service Framework) 지원이 거의 끝나 곧 게임에 업데이트 될 예정입니다. 비스타(Vista)에서는 기존 IME가 사라지고 TSF가 기본으로 작동하는 바람에 시작한 일이지만, TSF라면 제가 오래전부터 관여했던 것이라 제대로 구현하려고 노력했습니다.

만약 실제 사용되는 모든 윈도우즈 OS가 TSF기반의 IME 만을 지원한다면 오히려 문제는 간단해 질 수 있습니다. 왜냐면, 표준을 따르지 않는 중국어 IME들을 지원하기 위해 많은 해킹 코드가 사용되고 있기 때문입니다. 하지만, 불행히도 이제 비스타에서만 기본으로 TSF가 설정되어 있기 때문에, 어플리케이션을 개발하는 입장에서는, 오히려 실행 시간에 윈도우즈 버전을 확인하여 IME 혹은 TSF 중 하나를 선택하여 지원해야 하는 부담이 생겼습니다.

그러니까, 게임과 같이 DirectX를 사용하는 어플리케이션은 IME, TSF 둘 다 지원하는 코드를 작성하고 테스트해야만 한다는 것입니다. 저 같은 경우는 매우 오래전부터 이 일에 직접 관여해왔기 때문에 그나마 쉽게 구현하였으나, 처음 IME와 TSF를 접하는 개발자라면 이해하는 데에만 상당한 시간이 걸릴것으로 예상됩니다.

길드워에 TSF 지원기능을 구현하던 중 DirectX 8월 버전에 TSF 지원 기능이 추가된 CustomUI 예제가 발표되었습니다. 그러나, 이것은 TSF를 완전히 지원하는 것은 아니고 기존의 IME지원 코드 중에 비스타에서 동작하지 않는 부분만을 TSF를 직접 사용하여 해결하는 것 입니다. 게다가 그렇지 않아도 지저분한 기존의 코드에 TSF 코드까지 더해져 DirectX의 CustomUI IME 샘플 코드는 정말로 보기 싫을 정도로 복잡해져 있습니다. 다만, 이 코드를 작성한 사람을 만난 적이 있기 때문에, 더 이상의 코멘트는  하지 않겠다.^^

그런데, 여기서 길드워가 TSF를 완전히 지원 (fully enable) 했다는 것이 무슨 의미인지, 그리고 사용자들에게 어떠한 이득이 있는지 간단히 설명해 보겠습니다. (먼저 말하지만 게임에서는 그다지 유용하지 않은 것 같습니다. 더군다나 한자 변환을 많이 사용하지 않는 한국어 사용자들에게는 TSF가 당장 어떠한 편리함도 제공해주지는 않을 것 같습니다.)

우선, 비스타의 TSF에는 게임과 같이 전체화면을 사용하는 DirectX프로그램을 위해 UI Less mode가 추가 되었습니다. 그러나 UI Less mode 인터페이스로는 원래 추천 리스트 (candidate list) UI에 표시되는 모든 정보를 얻을 수 없는 단점이 있습니다.

길드워는 창모드 (windowed mode)를 지원하고 많은 플레이들이 이를 애용한다는 점을 고려해서, 창모드에서는 원래 위도우즈의 Candidate UI를 보여주고, 전체 화면모드에서만 UI Less mode를 사용한 커스텀 UI를 사용하였습니다.

아래 그림은 창모드에서 한자변환을 하는 예입니다. 보시다시피 원래 TSF Candidate UI를 보여주며 한자의 음과 훈이 표시되고 있습니다.



아래 그림은 전체화면 모드에서 한자변환을 하는 예입니다. 커스텀 UI를 사용합니다. 그리고 TSF를 지원함으로써 단어 단위의 한자변환이 가능함을 알 수 있습니다. (이러한 단어단위 한자 변환은 DirectX의 CustomUI 샘플코드로는 불가능한 것입니다.)



아래 그림은 일본어 입력기를 창모드에서 사용하는 예입니다. 일본어 입력기의 Candidate UI는 추천단어에 관한 보다 자세한 정보를 따로 보여 주고 있습니다.




아래그림은 또 다른 한글의 단어단위 변환예입니다.



TSF는 키보드 입력 뿐만아니라 다양한 종류의 입력 (음성인식, 필기인식 등)을 지원합니다. 또 완성된 글자의 재변환 (reconversion) 혹은 수정 (correction) 기능을 지원하여 추천 단어를 잘못 선택한 경우 아래와 같이 한자키나 수정 버튼을 이용하면 원래 변환한 단어를 자동선택하며 최초 입력했던 한글도 추천단어로 보여줍니다.

또 다른 예를 들어보면, 음성인식이나 필기 인식을 사용하여 글자를 입력한 경우, 재변환 기능을 이용하면, 원래 입력한 음성을 다시 들어 보거나 필기 인식한 글자의 모양을 볼 수도 있습니다.




한국어 사용자들은 게임상에서 실제 이용할지는 의문이나 필기 인식을 통해 한자를 입력하는 화면입니다. (일본인이나 중국사람들은 가끔 이 기능을 이용한다고 합니다.)




어쨋거나, 길드워는 비스타에서 TSF를 제대로 지원하게 되어 한자변환 추천리스트를 표시하는데 아무런 문제가 없어졌습니다.


크리에이티브 커먼즈 라이센스
Creative Commons License

TSF가 새로운 윈도우즈의 입력기라는 것을 잠시 언급한 적이 있습니다. 아래 함수호출 스택은 비스타에서 한글 입력기 상에서 하나의 키를 눌러 "ㄱ"이 입력되는 입력되는 과정을 보여 줍니다. 모든 키 입력은 어플리케이션의 "InsertTextAtSelection"가 최종으로 호출되어 입력기로부터 어플리케이션으로 실제 글자가 전달되게 됩니다.

TSF와 기존의 IME에 해당하는 Text Service 혹은 TIP (Text Input Processor)은 어플리케이션이 가진 텍스트 버퍼를 직접 액세스할 뿐만아니라 여러개의 TIP이 동시에 동작하고 있을 가능성도 있습니다. 따라서 텍스트 버퍼 액세스는 Lock이 필요합니다. 어플리케이션도 예외는 아닙니다. 당연히 구조는 기존 IME/IMM보다 복잡합니다.

하지만, 아래의 콜스택을 자세히 보면, 어플리케이션의 메인 메시지 함수인 WinMain으로 부터 InsertTextAtSelection 호출될 때까지 무려 47개의 함수 호출이 있으며, MSCTF.DLL로부터 다른 DLL함수를 호출하고, 외부 DLL이 다시 MSCTF 함수를 호출(reentrance)하는 것을 무려 3번이나 반복하고 있습니다. IMETIP.DLL도 마찬가지로 세번 보이고 있습니다.

결론적으로 "ㄱ"하나를 입력하기 위해 상당히 많은 CPU시간과 메모리가 소비되고 있는데, 이것은 Windows XP의 경우보다 더욱 복잡해진 것입니다. 물론, 요즘같이 빠른 CPU에서 사용자의 눈에 띌 정도의 속도 저하를 가져오는 것은 아닙니다. 그러나, 이러한 복잡한 구조로 인해 버그 발생의 가능성은 오히려 증가되고 유지보수는 어려워질 것이라는 것은 쉽게 추측할 수 있습니다. (여러개의 DLL 사이를 재귀적(recursively)으로 오가는 것은 좋은 구조라고 생각되지 않습니다)

입력기는 거의 모든 프로그램에서 로드되어사용된다는 점을 감안할 때, 최적화를 최우선으로 생각했다면 아래와 같은 함수호출은 피하지 않았을까 생각해 봅니다.


크리에이티브 커먼즈 라이센스
Creative Commons License

윈도우즈 입력 시스템의 가장 큰 변화는 XP부터 새로 들어가기 시작한 코드네임 Cicero인 Text Services Framework (TSF)가 기본으로 들어간 것 입니다. XP까지 기본으로 지원되던 IME/IMM 시스템은 일부 호환성 지원 (Cicero Unaware Application Support)을 제외하고 시스템에서 제거되었습니다. TSF를 프로그램적으로 꺼버리는  ImmDisableTextFrameService API도 없어졌습니다.

CUAS의 가장 큰 문제점은 입력 문자의 한자 변환에 사용되는 ImmGetConversionListImmGetCandidateList가 제대로 동작하지 않는다는 것 입니다. 이 문제로 인해 게임과 같이 시스템이 지원하는 Edit Control이 아닌 자체 컨트롤을 사용하여 한자 candidate를 지원하는 프로그램들은 비스타에서 한자 변환이 제대로 작동하지 않습니다. 좀 더 자세히 말하면 작동하기는 하나, 후보 단어들을 UI상에 표시하는데 문제가 있습니다. 한국어의 경우는 한자를 많이 사용하지 않아 큰 문제는 없으나, 일본어 중국어 입력의 경우는 치명적입니다. DirectX SDK에 있던 IME예제 프로그램도 제대로 작동이 안됩니다. (최신 버전의 IME 예제는 TSF지원 코드가 추가되어 동작하고 있습니다)

TSF는 COM기반의 새로운 입력체계로 키보드만을 위해 개발된 IME/IMM 시스템의 문제를 극복하고 입력기가 도큐멘트 문서의 내용을 보다 쉽게 액세스할 수 있도록 설계되어 있습니다.

문제는 기존 IME/IMM과의 몇 가지 호환성에 문제로 이미 츨시된 많은 프로그램 문제를 일으킬 것이라는 것입니다.

만약 비스타를 사용하는 중에 TSF를 지원하지 않는 어플리케이션에서 (현재 MS OFFICE를 제외한 대부분의 프로그램이 TSF를 지원하지 않음) 입력에 중대한 문제가 생긴다면, 기존 IME를 다시 동작시키는 방법을 선택할 수 있습니다. 자세한 내용은 아래 링크를 참고하십시요.
http://devnote.net/45
크리에이티브 커먼즈 라이센스
Creative Commons License