예~~~전에 지극히 개인적인 편의를 위해 만든 인젝터가 하나 있습니다. ㅎㅎㅎ
이름도 거창한(?) "건담 인젝터" ;;;
2011/07/31 - [My Portfolio] - [APP] GInjector (Gundam Injector)
이 당시 가장 신경을 썼던 기능이 "Drag & Drop" 인데요~~
( 기존의 다른 인젝터들을 쓸 때 매번 버튼을 눌러서 인젝션 할 대상파일을 지정하는게 귀찮아져서~
Drag & Drop 을 지원하는 걸 그냥 만들자~~ 해서 뚝딱뚝딱 만든거랄까요.. ^^;;;; )
이때만해도 주로 인젝션 작업을 한 OS 가 XP 였기에~ 별다른 불편함없이 잘 썼습니다.
그러다가 이런저런 이유로 몇 달 전부터 주 작업 OS 를 Win7 으로 바꿨는데~
인젝터를 '관리자 권한으로 실행' 만 하면~~ 탐색기(낮은 권한 상태)로부터 Drag & Drop 이 안먹히더군요;;;
Drag & Drop 때문에 만든 인젝터인데 그게 안먹힐 때의 그... 허탈함이란..;;;
'수정해야지... 수정해야지...' 생각만 해오다가 불과 2 ~ 3일 전에서야 수정을 했습니다.
키포인트는 비스타부터 지원되는 "ChangeWindowMessageFilter" API 인데요~~
( MSDN - http://msdn.microsoft.com/en-us/library/windows/desktop/ms632675(v=vs.85).aspx )
일반적으로는 권한이 낮은 프로세스에서 권한이 높은 프로세스로 메시지 전달이 안되는데
메시지를 받는 프로세스쪽(저의 경우는 인젝터가 되겠죠~)에서
위의 API 를 이용해서 메시지 필터 설정을 해주면 메시지 전달이 가능하더군요~ :)
Drag & Drop 과 관련된 메시지를 허용하도록 설정하는 코드는 다음과 같습니다.
// // 컴파일러 버전에 따라 "ChangeWindowMessageFilter" 를 바로 쓸 수 없는 경우도 있어서 // 동적으로 구해오는 방식으로 했습니다. // #ifndef WM_COPYGLOBALDATA #define WM_COPYGLOBALDATA 0x0049 #ifndef MSGFLT_ADD #define MSGFLT_ADD 1 typedef BOOL (WINAPI *pfnChangeWindowMessageFilter)(UINT, DWORD); . . . HMODULE hUser32Mod = LoadLibrary("USER32.DLL"); if (hUser32Mod != NULL) { pfnChangeWindowMessageFilter pChangeWindowMessageFilter = (pfnChangeWindowMessageFilter)GetProcAddress(hUser32Mod, "ChangeWindowMessageFilter"); // XP 이하의 OS 는 해당 API 가 없음. API 가 있는 경우만 실행될 수 있도록 함... if (pChangeWindowMessageFilter != NULL) { pChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD); pChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD); pChangeWindowMessageFilter(WM_COPYGLOBALDATA, MSGFLT_ADD); } } // 이후 필요없는 경우 USER32.DLL 은 언로드~ // if (hUser32Mod) FreeLibrary(hUser32Mod);
덕분에 지금은 Win7 에서 인젝터를 "관리자 권한으로 실행" 해도 Drag & Drop 이 잘 동작해서~
인젝터가 존재의 이유를 다시 찾았습니다... =_=v...
'Programming' 카테고리의 다른 글
Visual Studio Community 2013 공개 (0) | 2014.11.14 |
---|---|
Themida VM 매크로 사용시 주의점 (2) | 2014.02.08 |
INTEL & AMD Developer Guides & Manual (0) | 2013.02.09 |
[LIB] Disasm 엔진 - BeaEngine (10) | 2012.02.16 |
[LIB] Hooking 라이브러리 - Detour 3.0 (0) | 2011.11.25 |