head	1.3;
access;
symbols;
locks
	root:1.3; strict;
comment	@# @;


1.3
date	2010.03.31.15.01.04;	author root;	state Exp;
branches;
next	1.2;

1.2
date	2010.03.31.11.48.20;	author root;	state Exp;
branches;
next	1.1;

1.1
date	2010.03.31.11.47.56;	author root;	state Exp;
branches;
next	;


desc
@/opt/nforge/var/wiki/saenaru/data/text/kbdkor_2edll
@


1.3
log
@210.220.67.74;;wkpark wkpark ;;
@
text
@MS 한글 IME에서는 type 1,2,3 (혹은 A,B,C) 및 103/106 키보드에 대한 각각의 키보드 변경과 IME가 무관하게 작동되고 있습니다.
 * kbd101a.dll - Type A 혹은 Type 1 - 오른쪽 Alt키: 한/영전환, 오른쪽 Ctrl키: 한자키 - 101 자판의 기본 드라이버.
 * kbd101b.dll - Type B 혹은 Type 2 - 오른쪽 Ctrl키: 한/영전환, 오른쪽 Alt키: 한자키 - 대부분 사용자는 거의 사용안함.
 * kbd101c.dll - Type C 혹은 Type 3 - Shift-Space 한/영전환, Ctrl-Space키: 한자키 - 101 자판 사용자에게 인기있는 드라이버
 * kbd103.dll - 한글 103/106 키보드 드라이버

MS 한글 IME에서 키보드 레이아웃 드라이버는 kbd101x.dll가 아닌 kbdkor.dll이며, 레지스트리를 직접 수정하거나 키보드 드라이버를 제어판에서 바꿔주면 kbd101x.dll을 선택적으로 사용하게 됩니다.

------
일반적인 키보드 레이아웃 드라이버가 가지는 export된 함수
 * KbdLayerDescriptor 

한국어/일본어 키보드 레이아웃을 지원하는 키보드 레이아웃 드라이버의 경우 
 * KbdLayerDescriptor
 * KbdNlsLayerDescriptor - 한국어 자판의 경우 불필요해 보이며, 일본어자판의 경우 사용됨.

kbdkor.dll 혹은 kbdjpn.dll 드라이버가 가지는 export 함수명

 * KbdLayerDescriptor
 * KbdNlsLayerDescriptor
 * KbdLayerRealDllFileNT4 - 아래 설명 참조
 * KbdLayerRealDllFile - 레지스트리에서 kbd101x.dll에 관한 원래의 키보드 레이아웃 드라이버 이름을 레지스트리에서 가져옴
 * KbdLayerMultiDescriptor

----
위의 내용은 몇몇 disassembler 및 decompiler를 통해서 분석해본 결과입니다.

MS 한글 IME에 내정된 키보드 레이아웃 드라이버인 kbdkor.dll 드라이버는 101a/b/c 및 103키보드 드라이버를 위한
껍데기 드라이버(stub driver라고 불리움) 역할을 하는 것으로 생각되며 이것을 잘 분석하여서 새나루 입력기만을 위한 드라이버도 만들 수 있을 것입니다.

이것이 가능하다면,
 1. 콜맥/드보락 및 프랑스어/독일어 자판간 전환을 보다 손쉽게(?) 할 수 있을 것.
 2. 101, 103/106 키보드 지원을 손쉽게 할 수 있을 것.
----
== !KbdLayerMultiDescriptor ==
{{{HRESULT KbdLayerMultiDescriptor(PKBDTABLE_MULTI pkb)}}}

multi layer를 지원하기 위한 것인 듯. 쓰임새는 알 수 없다.

== !KbdLayerRealDllFileNT4 ==
디스어셈블 하여 살펴보면 항상 false가 된다. 그냥 다음과 같이 만든다.
{{{
HRESULT KbdLayerRealDllFileNT4(LPTSTR lptr)
{
    return (HRESULT) 0;
}
}}}

== !KbdLayerRealDllFile ==
가장 핵심적인 함수. a 인자는 터미널 서버를 위한 인수인 것 같고, b는 전혀 안쓰이고 있다.

다음과 같이 만들면 키보드 드라이버의 내용 대신에 kbdcmk.dll을 읽는다. kbdkor.dll의 경우 레지스트리를 검사해서 kbd101a.dll과 같은 PC의 키보드 드라이버에 대응된 드라이버를 읽게끔 되어있다.

{{{
HRESULT KbdLayerRealDllFile(DWORD hkl, LPTSTR lptr, DWORD *a, DWORD b)
{
    _wcscpy ( lptr, TEXT("kbdcmk.dll"));
    return (HRESULT) 1;
}
}}}
@


1.2
log
@210.220.67.74;;wkpark wkpark ;;
@
text
@d34 27
@


1.1
log
@210.220.67.74;;wkpark wkpark ;;
@
text
@d9 1
a9 1
------ 
@
