컴퓨터 공부/Win32 API 프로그래밍

[5월 6일 2교시] 서브클래싱 + 후킹

려리군 2009. 5. 6. 15:52

서브 클래싱

윈도우 프로시저로 보내는 메세지를 중간에 가로채는 기법

운영체제 ㅡㅡㅡㅡ→ 서브클래스 프로시저

      ↑                                   |

      └ㅡㅡ윈도우 프로시저ㅡㅡ┘


인스턴스 서브 클래싱

윈도우 생성 후 그 윈도우 하나에 대해서만 윈도 프로시저를 교체.

형태)

이전 서브클래싱 윈도우 프로시저 = SetWindowLongPtr(HWND hWnd, GWLP_WNDPROC, (LONG_PTR)서브클래싱 윈도우 프로시저);

hWnd : 서브클래싱할 윈도우


서브클래싱 윈도우 프로시저에서는 더 이상 처리할 메세지가 없으면 CallWindowProc호출.

CallWindowProc(이전 서브클래싱 윈도우 프로시저, hWnd, iMessage, wParam, lParam);


전역 서브 클래싱

윈도우 클래스에 대해 서브 클래싱.

앞으로 만들어질 모든 윈도우에 영향을 준다. (도면을 바꾼 후 생성)

SetClassLong함수 사용.

형태)

이전 서브클래싱 윈도우 프로시저 = SetClassLongPtr(HWND hWnd, GWLP_WNDPROC, (LONG_PTR)서브클래싱 윈도우 프로시저);

hWnd : 서브클래싱할 윈도우


서브클래싱 윈도우 프로시저에서는 더 이상 처리할 메세지가 없으면 CallWindowProc호출.

CallWindowProc(이전 서브클래싱 윈도우 프로시저, hWnd, iMessage, wParam, lParam);


슈퍼클래싱

기존 클래스를 바탕으로 완전히 새로운 클래스를 만드는 것.

예시) 

GetClassInfo(NULL,"edit",&wc);

wc는 수정하여 새로운 형태의 클래스를 만들 수 있다.


BOOL GetClassInfo(HINSTANCE hInstance, LPCTSTR lpClassName, LPWNDCLASS lpWndClass);

윈도우 클래스에 관한 정보를 얻는다. 

리턴 : 성공적으로 매치되는 윈도우 클래스 구조체를 찾았다면 TRUE 그렇지 않으면 FALSE

hInstance (in) : 인스턴스(프로그램) 핸들.

lpClassName(in) : 윈도우 클래스 명.

lpWndClass(out) : 윈도우 클래스 구조체를 얻는다.


후킹

메세지가 목표 윈도우로 전달되기 전에 메세지를 가로채는 프로시저

HOOK Chain : 훅 프로시저 함수들의 번지를 담고 있는 함수 포인터 배열. (체인을 따라 다움 훅 프로시저에게 메세지를 반복 전달)

...