2009/01/10 02:03

x64 프로그래밍과 디제이맥스 트릴로지(DJMAX TR)


(잊지 않겠다 펜타!!)

 최근 DJ Max Trilogy : Over The Maximum(이하 OTM)을 구입하였다. 개발자의 관점으로 볼 때 여러가지 문제점을 갖고 세상에 태어난 프로그램이었다. 딱 한가지 눈여겨 볼 부분이 있다면 USB Profile Key(이하 키)라는 일종의 복제 방지 방법을 사용했다. 정품 구입을 하면 USB로 제작된 특수한 키가 동봉되어 있는데, 이 키를 삽입해야 게임을 플레이 할 수 있다. 이 키는 게임을 설치할 때 관련 드라이버를 설치하는 것을 요구한다. 외국계열 보안 회사인 듯 한데 SafeNet.Inc라는 업체이다. 펜타비전 측에서 발주했겠지...

(일단 정품 인증! 이 화면을 볼 수 있다는 것 부터 인증임!!)

 어찌됬든 OTM은 윈도우 전용 프로그램이고 당연하게 레지스트리를 사용한다. OTM은 따로 설치하지 않아도 키만 존재하면 폴더 전체를 복사해도 게임의 플레이가 가능하다. 이것을 이용해서 4GB(OTM은 약 2.2GB) 정도의 USB 대용량 디스크에 OTM을 통채로 복사하고 설치 DVD에서 USB 키를 위한 드라이버 설치 프로그램을 복사해둔다. 마지막으로 레지스트리에서

 HKEY_LOCAL_MACHINE\SOFTWARE\PENTAVITION\DJMaxTrilogy

 내보내기로 파일을 만들어 복사해둔다. 이런 준비를 하고 나서 다른 PC에서 키 설치 프로그램을 설치하고, 내보내기로 레지스트리를 만든 파일에서 InstallPath만 현재 USB 대용량 드라이브에 있는 OTM의 경로로만 바꿔주고 레지스트리에 병합한다. 이 후 USB 키를 삽입하고 게임을 플레이 하면 이상없이 된다.

 여기서 매번 레지스트리 병합용 파일을 고쳐야 하는 귀찮음이 반드시 존재한다. 이 부분을 없애기 위하여 코딩을 했다... 평범하게 Windows XP SP3(32bit)에서 Visual Studio 2008 Team Suit SP1의 C++ IDE로 간단하게 한다고 코딩을 시작했는데... 3일 정도 코딩한 것 같다.

 무엇이 문제였을까? 그것은 CPU Architecture의 문제였다. 회사에서 사용하는 컴퓨터는 XP지만 집에서 사용하는 컴퓨터는 Windows Vista (64bit) 였다. 64bit 프로그래밍은 해 본적이 없어서 이런 경우가 발생한 것 같다. 32bit 버전 윈도우에서는 내가 만들 프로그램이 이상없이 실행되었다. 하루만에 뚝딱 만든 프로그램 치고는 쓸만했다. 하하하 웃으며 집 컴퓨터에서 사용해 보았다. 왠지 레지스트리 삽입/삭제 부분에서 에러가 났다... 2번 에러, Access Denied 였다.

 검색!! 64bit 윈도우에서는 호환성을 유지하기 위해 32bit 프로그램을 설치/실행 할 수 있다. 이 때 레지스트리에 들어가는 값이 64bit 프로그램과 32bit 프로그램 사이에 혼동이 있을 수 있기에 32bit 프로그램의 레지스트리 값은 Wow6432Node라는 새로운 키값 아래 모두 넣어둔다. 그리고 설치된 32bit 프로그램이 평범하게 해당 레지스트리 값에 접근할 때 윈도우는 알아서 Wow6432Node값 아래로 연결해 준다.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\PENTAVITION\DJMaxTrilogy
이 경로가 실제 값이 들어가는 부분이다.

(클릭하면 크게 보일 것인가? 블로그에는 단순한 그림만 넣기에 항상 최소화해서 크게 되는지는 모르겠군.)
(잘 보면 위에 PENTAVISION이 있고 아래에 PENTAVISION이 있다.)
(위의 것은 아마도 인스톨러가 넣은 부분이라고 조심스레 추측해 본다.)

 좋다. 인터넷 검색을 들어갔다. 까막's 블로그 :: 윈도우버전과 레지스트리 (32비트/64비트 호환용) 을 찾았다. 나중에 알았지만 MSDN에 매우 유사한 코드도 있었다.
Offline MSDN 주소는 ms-help://MS.MSDNQTR.v90.en/sysinfo/base/getting_the_system_version.htm
Online MSDN 주소는 http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx

 까막님의 고마운 코드를 (무단으로) 조금 손봐서 Architecture를 얻을 수 있었다. 하지만 역시 레지스트리에 접근 거부가 되는 문제가 계속하여 발생하였다. 세번째 날에 해결을 했지만... 뭐, 추가적으로 게임 데이터 중 점수, 콤보 같은 비교적 덜 민감한 데이터가 컴퓨터에 저장되는 것을 확인하여 얻어 오고 적어 넣는 코드도 작성했다. 사실 버그를 먼저 수정하고 새로운 기능을 넣는 것이 적절한 순서이지만... 두번째 날에는 “그냥 32bit에서만 돌리자” 하고 포기한 상태였기에 이런 기능을 먼저 코딩했다.

 세번째 날. 검색 한 번에 알아낸 사실... “64bit 프로그램으로 작성해야 레지스트리에 접근 금지 당하지 않는다.” 이런... 64bit 프로그래밍은 해본 적이 없는데... 이런 최신(?) 내용은 항상 영문자료에서 나온다. (아니, 우리나라 웹이 너무 보수적인건가?) MSDN을 뒤져보니 2005 버전부터 간단하게 64bit 컴파일 하는 방법이 소개되어 있었다. 열심히 영문 MSDN을 읽어 64bit 포팅을 했다.(나중에 보니 한글로도 있더라. 2005 버전은 한글화가 되있군.. ㅜㅜ) 몇 번의 삽질 끝에 성공을 했는데, 컴파일을 해보니 warning 두개 뜨더라... MSDN에 의하연 size_t는 64bit 컴파일시 64bit로 정의되기 때문에 32bit 프로그램에서 흔히 int를 size_t와 혼용하여 사용하면 데이터 손실이 있을 수 있다고 적혀 있다. 역시 나에게 나온 warning 두개도 size_t 문제였다. 4byte의 int로 바꾸어 주니 아무런 문제 없이 컴파일이 됬다. 64bit로 설정하는 법은 요청이 있으면 설명하겠으나 MSDN을 잘 보면 조금 친절하게 나와있다. MSDN은 Microsoft에서 받을 수 있다. 최신 버전으로 받아서 설치하면 좋다.

 회사 컴퓨터에서 64bit로 컴파일한 프로그램은 컴파일 해준 회사 컴퓨터에서 조차 실행이 안됬고 집 컴퓨터에서는 이상없이 실행되었다. (조금 의외인 것은 집 컴퓨터에서 64bit로 컴파일을 한 프로그램은 32bit 컴퓨터에서 또 잘 돌아간다는 것. 이것은 좀 더 연구해봐야 겠다.) 레지스트리도 이상없이 접근하였고 두번째 날까지 괴롭혔던 32bit/64bit 문제도 해결 되었다. 이 와중에 OTM의 업데이트로 레지스트리를 수정해도 게임에 적용이 안되는 부분을 발견하였다. 치사하게(?) 그 사이에 USB 키에 저장하는 것으로 바꾼 것으로 보인다. 얼마 안 되던 옵션을 삭제하니 프로그램이 썰렁해졌다. 뭐 거의 설정한다고 할 것도 없고 자동으로 설정 잡아주는 것만 확인하고 실행하면 끝...

(게임 설치 화면에서 영어/한글 선택을 할 수 있게 해주고 언어를 변경하려면 다시 설치 해야 한다는 메시지가 나온다.)
(난 실제 한글로 설치했지만 위의 스샷처럼 영문이 나오는 것을 볼 수 있다.)
(간단하다 레지스트리에서 Language만 1로 바꾼것 뿐이니까.)


(간단한 인터페이스(?)의 OTM 런쳐 프로그램)


 프로그램 : DJMaxPCCafe(x64).exe
 소스코드 : PCCafeDJing.zip

 소스는 별 것 없으니 미력하나마 공개하겠다. VS2008로 작성한 코드이고 중요한 코드 외에 IDE가 작성해주는 도움 파일은 삭제했다. 경력있으신 분들이 보시면 웃으시겠지만 공부하시는 분들에게는 조금이나마 도움이 될 것이다. 무려 DDK까지 사용한 속이 깊은 프로그램이다. 자동으로 USB 대용량 드라이브 찾고 OTM이 설치된 경로까지 뽑아주는 영리한 프로그램이란 말이다!! 왠만한 버그는 해결한 것 같지만 딱 한가지 불안한게 있다. 두개 이상의 OTM이 설치된 USB 대용량 드라이브가 있다면? 대응하는 코드는 넣어두었지만 정상 작동 하는 것을 확인해 보진 못 했다. 뭐 왠만하면 그러지 말자. ㅋ

 오늘의 느낀점 : art.orient 님 처럼 워드 프로그램으로 미리미리 글을 써 놓고 여기에는 편집만 해 넣는게 좋겠다. 이거 하나 쓰는데 두시간이나 보내다니;


프로그램 설명

1. 게임과 관련 프로그램의 설치
 가.준비물
   - USB 대용량 드라이브(이하 USB)
   - DJ Max Trilogy : Over The Maximum USB Profile Key(이하 Key)
   - Launcher for DJ Max Trilogy : Over The Maximum 프로그램(이하 런쳐)
   - 대충 쓸만한 컴퓨터 - 설마 USB 삽입구는 있어야...

 나. 게임 설치 과정
   - DJ Max Trilogy : Over The Maximum(이하 OTM)을 컴퓨터에 설치합니다.
   - 정상적인 방법으로 패치를 실행합니다.
   - 최신 패치를 한 OTM 폴더를 전부 기 준비된 USB에 복사합니다.(특정 폴더를 준비하지 않아도 됩니다.)
   - 게임 설치 DVD에서 “USBSETUP” 이라는 폴더의 USBSetup.exe를 USB에 복사합니다.
   - 본 런쳐를 받아 USB에 복사합니다.
   - (옵션) 플레이 데이터(개별 점수, 콤보등)를 “Extract Game Data from PC” 버튼을 눌러 USB에 저장해 둡니다.
     (해당 기능을 데이터를 단순히 덮어쓰는 것 뿐이므로 데이터 손실 가능성이 있습니다.)


2. 게임 실행 과정
  - OTM이 설치되지 않은 컴퓨터에 USB를 삽입합니다.
  - USBSetup.exe를 실행하여 Key를 위한 드라이버를 설치합니다. (절대로 Key를 먼저 삽입하지 마세요. 라고 메뉴얼에...)
  - 본 프로그램을 기동합니다.
  - 자동으로 설정되는 값을 확인을 하고, 적절히 수정을 가합니다.
  - (옵션) 저장된 게임 데이터를 “Inject Game Data to PC” 버튼을 눌러 해당 PC에 저장합니다.
     (해당 기능을 데이터를 단순히 덮어쓰는 것 뿐이므로 데이터 손실 가능성이 있습니다.)
  - “Regist & Run” 버튼을 눌러 신나게 게임을 합니다.
  - (옵션) 플레이 데이터(개별 점수, 콤보등)를 “Extract Game Data from PC” 버튼을 눌러 USB에 저장해 둡니다.
     (해당 기능을 데이터를 단순히 덮어쓰는 것 뿐이므로 데이터 손실 가능성이 있습니다.)
 - (옵션) “Clean Registry” 버튼을 눌러 레지스트리를 정리합니다.


3. 주의사항 및 부가설명
 가. 본 프로그램은 (주)펜타비전과 전혀 관계가 없습니다. 아니 내가 펜타랑 관계가 없다는!
 나. 그러므로 손실되는 데이터의 책임은 사용자에게 있습니다.
 다. 예상되는 데이터 손실을 방지하기 위하여 위의 1, 2 과정을 반드시 숙지하고 실행하여 주시기 바랍니다.
 라. 64bit 버전의 윈도우에서 32bit 버전의 프로그램이 실행은 되지만 정상작동이 되지 않으니 주의하십시오.
 마. 버그는 충분히 잡았으나 버그가 발생하면 알려주시면 감사하겠습니다.
 바. Wizards of Inteligence Aqua는 내가 독립하면 설립할 회사의 이름이 될 것 같습니다. 설마 누가 하지는 않겠지; 위아 라고 읽기도 좋고 ㅋ

 이거 완전히 메뉴얼이 된 느낌...



수정 - 2009/2/9 월요일

 조그마한 버그가 하나 발견되었다. 자동으로 디렉토리를 찾아주는데, 파일명에 tr.exe가 들어가 있으면 그것으로 지정해버린다. 외장하드에서 여러가지 데이터를 옮기는 과정 중, 심심해서 트릴로지를 했다. 이 중 Visual Studio 6가 있었는데, <Visual Studio 6>\COMMON\TOOLS\APE 아래에 AEEXPDTR.EXE 라는 파일을 지정해 버리는 일이 발생했다. 내가 찾기를 대충해서 벌어진 일이다. 현재로는 그다지 위험한 버그도 아니고(콤보박스로 USB 메모리 드라이브를 바꾸면 해결) 단순히 AEEXPDTR.ref 파일이 하나 추가되는게 문제다. 일단 회사 노트북 세팅을 끝내고 살짝 고쳐보겠다.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://wizertai.egloos.com/tb/4048644 [도움말]

핑백

  • Dear My Life : 디제이 맥스 트릴로지 런처 Ver.1.1.0.1 2009-06-01 13:30:49 #

    ... inlauncher.exe를 실행시켜 정상적인 진행으로 변경 좀 더 자세한 개발 기획이나 생각 등을 두서없이 적은 내용을 다음 링크를 참고하자.x64 프로그래밍과 디제이맥스 트릴로지(DJMAX TR) 주의사항본 프로그램(런처)은 트릴로지를 좀 더 편하게 즐기고자 만든 것입니다. 본인은 펜타비전의 제품을 구입한 하나의 고객일 뿐입니다. ... more

  • Weekly Digest March 10th | kurox-くろっくす- 2010-03-10 03:16:04 #

    ... チャの問題で32ビットか64ビットかでかわったりするとか。レジストリの位置が異なるらしい [96kurox] で、そうした移行の作業を簡易化するのがこちらのツールである。 http://wizertai.egloos.com/4048644 [96kurox] 100人の命と1人の命はどちらが大切か。という問題を扱うんだなぁずるい。 [96kurox] 初回から殺しちゃっていいのかな [96kurox ... more

덧글

  • DarthSage 2009/01/20 21:58 # 답글

    레지스트리 백업을 해두지 않고 설치 폴더만 복사해둔채로 난감해 하고 있었는데 이 프로그램 덕분에 잘 사용하고 있습니다 ^^ 감사합니다.
  • 에르타이 2009/01/21 20:40 #

    유용하게 잘 쓰고 계시다니 참 다행입니다. 패치는 안되요, 아시죠. -ㅅ-;

    방문해 주셔서 감사합니다.
  • Nar 2009/03/17 21:23 # 삭제 답글

    덕분에 아무 컴퓨터에서 플레이 가능하네요~

    아쉬운건 두개의 USB갖고 다닌다는게 쫌 아쉽제만 ^^;

    감사합니다.
  • 2100km 2011/12/04 19:06 # 답글

    정말 감사합니다. DMTR 플레이 유저이면서 프로그래머 지망생인 저에게 에르타이님은 그저 존경의 대상...
댓글 입력 영역