본문 바로가기

Application Programming Interface/Windows API

Windows DDK 문서 IMEIMES.DOC - 10. Windows NT/Windows 2000 Issues(윈도우 NT/윈도우 2000 배포)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

IME 개발을 위한 Win32 다국어 IME 개요

버전 1.32
최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong


Windows NT/Windows 2000 배포

 아래는 주로 Windows NT/Windows 2000과 관련된 특별한 주제를 다룹니다. 그러나 몇 가지는 Windows 98에도 적용가능합니다.

IME와 현지어 호환성

 Windows 2000은 어떤 현지 언어 버전에서도 완전한 기능의 IME를 지원합니다. 즉 여러분이 개발한 IME는 어떤 언어로 된 Windows 2000에서도 설치되고 사용될 수 있습니다. IME 개발자는 이를 고려하고 각 환경에서 테스트해보아야 할 것입니다. 이 새로운 기능은 IME 개발자가 작성한 IME 도움말이 다양한 언어의 운영체제에서도 잘 보이도록 적절한 문자집합과 글꼴을 준비하도록 요구합니다.

 또한 IME 개발자는 Windows 2000에서 작동하는 IME를 제작할 때 유니코드를 지원하도록 작성해야 합니다. 유니코드를 지원하는 IME는 시스템 현지 언어가 무엇이든, 유니코드 어플리케이션에서 원활히 작동될 것입니다. 유니코드가 아닌 IME의 경우 사용자는 이를 사용하기 위해 시스템 로케일 설정을 IME가 사용하는 것과 같은 언어로 직접 변경해야 합니다. Windows 95/98/NT/2000이 지원하며, IMM/IME 인터페이스의 ANSI 버전과 함께 유니코드 버전의 인터페이스는 IME를 위한 유니코드 통신을 제공합니다. 유니코드로써 시스템과 통신하기 위해서 IME는 IMEINFO 구조체의 fdwProperty 멤버에 IME_PROP_UNICODE 비트를 설정해냐 합니다. 이는 ImeInquire 함수의 첫 번째 매개변수로 전달됩니다. 비록 IME를 초기화하기 위해 어플리케이션 프로세스의 모든 스레드마다 ImeInquire 함수가 호출되지만 IME의 입장에서는 항상 같은 IMEINFO 구조체가 전달된다고 여겨도 됩니다. Windows 98의 경우 ImmIsUIMessage를 제외한 모든 함수에 대해 유니코드 버전을 제공합니다.

보안 문제

 Windows NT/Windows 2000에 두 가지 보안 문제가 있습니다. 하나는 네임드 오브젝트(Named Objects)와 관련되었고 다른 하나는 윈 로그온(Winlogon)과 관련되었습니다.

네임드 오브젝트(Named Objects)

 IME는 로컬 시스템의 여러 프로세스에서 접근하기 위한 다양한 이름의 객체를 생성할 수도 있습니다. 그러한 객체는 파일, 뮤택스(Mutex), 이벤트 등의 자원을 가질 수 있습니다. 프로세스가 시스템에 로그온하여 상호작용하는 다른 이용자에 의해 실행될 수 있기 때문에 기본 보안 속성(IME가 보안 속성으로서 NULL 매개변수로 객체를 생성할 때 시스템이 기본으로 만들어주는 보안 속성)은 로컬 시스템에서 실행중인 모든 프로세스에 항상 적합하지는 않습니다.

 Windows NT/Windows 2000에서 IME를 사용하는 첫 번째 클라이언트 프로세스는 사용자가 시스템이 로그온 할 수 있게 해주는 Winlogon일 것입니다. Winlogon 프로세스가 로그온 세션동안 시스템 계정에 소속되어있고 시스템이 종료될때까지 여전히 살아있기 때문에 IME가 로그온 세션동안 기본 보안 속성으로 만든 네임드 오브젝트는 이전에 로그온 했던 사용자에게 소속된 다른 프로세스가 접근할 수 없습니다.

 IME 예제 코드는 네임드 오브젝트에 적합한 보안 속성을 직접 생성하며 Microsoft Platform DDK에 첨부되어 있습니다. 샘플 코드를 사용하여 IME 개발자는 로컬 시스템의 모든 클라이언트 프로세스가 접근할 수 있는 다수의 네임드 오브젝트를 생성할 수 있습니다. 샘플 코드에서 할당하고 있는 보안 속성은 프로세스마다 부여됩니다. 네임드 오브젝트를 빈번히 생성하는 IME는 프로세스가 실행될 때 보안 속성을 초기화하고 프로세스가 종료될 때 이를 해제할 수 있습니다. 네임드 오브젝트를 생성하지 않는 IME도 종종 네임드 오브젝트를 생성하기 직전에 보안 속성을 초기화하고, 생성된 직후에 이를 해제할 수 있습니다.

Winlogon

 로그온 세션을 유지하고 있는 사용자가 시스템에 접근할 권한을 아직 승인받지 못할 때 IME 설정 대화상자로부터 제공받은 정보들은 보안 문제를 야기할 수 있습니다. 그럼에도 로그온 세션에서 IME가 활성화되지 않은 채로 시스템 관리자는 시스템을 설정할 수 있습니다. 잘 설계된 IME는 클라이언트 프로세스가 Winlogon일 경우 사용자에게 설정 대화상자 여는 것을 허락하지 말아야 합니다. (즉 로그온 화면에서는 IME 설정이 안 되게 막아놓아야 함) IME는 ImeInquire함수에서 dwSystemInfoFlags의 IME_SYSTEMINFO_WINLOGON 플래그를 통해 자신을 사용하는 클라이언트 프로세스가 Winlogon인지 아닌지를 확인할 수 있습니다.