2007~2011/Windows Platform2011. 3. 21. 16:53

Windows Server 2003 한글 버전의 서버에서 명령 프롬프트(Command Prompt)를 실행했을 때, 창이 작게 나오고 글자도 잘 보이지 않을 정도로 작은 모습입니다.

폰트 문제일까?
Command Prompt - 속성 - 글꼴 메뉴로 이동하니 win32 오류 0xc0000005 액세스 위반 INVALID_POINTER_READ 오류가 발생합니다. 짧은 지식으로 선택된 글꼴에 대한 정보를 얻지 못하는 상황으로 찍어 봅니다. 




명령 프롬프트에서는 한글 입력도 되지 않는군요. CHCP 명령으로 현재 설정된 코드 페이지 정보를 확인해 보니 예상과는 달리 Active code page 가 437 로 나타납니다.  



HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage 레지스트리로 이동하여 ACP, OEMCP 값을 확인해 봅니다.

ACP(ANSI 코드 페이지)는 1252, OEMCP(OEM 코드 페이지)는 437로 설정되어 있습니다. 즉, ANSI 문자에 대한 기본 코드 페이지는 U.S. English 로 설정되어 있으며, DOS 프로그램에서 주로 사용되는 OEM 코드 페이지도 437 (United States) 로 설정되어 있습니다. 일반적으로 이 값은 운영체제의 설치 언어가 English 일 때 기본값입니다. 한글 윈도우 서버라면 ACP, OEMCP 값이 모두 949로 되어 있는 것이 기본 값인데 어떤 이유로 이 값이 변경되었는지는 알 수 없습니다. 3rd party 응용 프로그램에 의해서 변경될 수도 있을 거란 생각을 조심스럽게 해 봅니다.

chcp 949 명령으로 코드 페이지 변경을 시도해 봅니다. Invalid code page 라고 나타나는군요. 그렇다면 OEMCP 437 값을 레지스트리에서 강제로 949 로 변경해 보면 어떨까요? ACP : 1252, OEMCP : 949 값으로 설정하고 재부팅 하니 0xA (IRQL_NOT_LESS_OR_EQUAL) Crash 가 발생하는군요. 부팅 시 ACP, OEMCP, OEMHAL 값을 참조하여 필요한 Nls 파일을 불러오는 데 일치하지 않은 언어 정보 테이블 코드 페이지 지정이 문제를 일으킨 것으로 보입니다.


재부팅 하여 Windows 고급 옵션 메뉴에서 '마지막으로 성공한 구성' 으로 레지스트리 값을 복원한 뒤 ACP, OEMCP 값을 949로 변경하고 시스템을 재시작하면 아래와 같이 활성 코드 페이지가 949로 변경되고 명령 프롬에서 한글 처리가 가능하다는 것을 확인할 수 있습니다. 


그냥 그렇다구요....;;;


[참고자료]
ACP
http://technet.microsoft.com/en-us/library/cc976085.aspx

OEMCP
http://technet.microsoft.com/ko-kr/library/cc775938(WS.10).aspx


작성자 : Lai Go / 작성일자 : 2011.03.21

Posted by Lai Go