home > working > C/C++ > Source, Tip

 


Name  
   조규남 
File #1  
   process.jpg (78.7 KB)   Download : 76
File #2  
   ProcessHook.zip (246.2 KB)   Download : 172
Subject  
   System의 CreateWindow 함수를 모니터링 하는 프로그램

subject: hook, hooking, createwindow, MFC

아래에 있는 소스는 Toolhelp32를 이용해서 프로세서를 모니터링 하는 프로그램이었다.

이번 소스는 Win32 Hooks 을 이용해서 CreateWindow()가 시스템에서
불릴 때마다 그것이 어떤 Wnd Class 인지를 알려 주는 프로그램이다.

MSDN에서의 위치는

MSDN Library > Technical Articles > Windows Platform > Windows Management > Win32 Hooks

방식은 SetWindowsHooks 라는 함수로 특정 hooks 을 hooking 해서
해당 hooks 이 일어 날 때마다 그것을 캐치 해서 일정한 처리를 해주는 것이다.

말은 어려운데 쓰는 것은 간단하다. 우선 셈플을 VIsual C++ 6.0에서 열면 프로젝트가 두개가 들어 있다. 하나는 Hooksdll.dll 을 만드는 프로젝트이고 하나는 Hooksdll.dll 을 사용하는 MFC 프로그램이다.

DLL 내부에 대한 설명은 MSDN을 참고 하는 것이 더 쉬울 것이다.

사용방법은 InitHooksDll을 호출해서 Hooksdll 을 초기화 하고
InstallFilter을 호출해서 어떤 Hooks 을 Hooking 할 것인지를 정의 한다.

WM_CBT_EVENT 라는 메세지가 WH_CBT가 발생할 때마다 발생하고 이 메세지를 처리 하면 된다.

WM_CBT_EVENT는 ProcessUserMessage.h 에 정의 되어 있고 InstallFilter에 사용되는 CBTINDEX와 DLL 함수 extern은 HookDLLExport.h에 정의 되어 있다.

현재 소스는 CBT의 HCBT_CREATEWND만 처리 하도록 되어 있는데
HOOKSDLL.C 에서 처리 하고자 하는 Hooks의 CALLBACK을 수정하고 DLL에서 보내주는 메세지를 추가하고 핸들러를 추가 하면 된다.
어떻게 하냐고는 물어 보지 말고 직접 해보도록 하라 -_-;

ps. CreateWindow를 Hooking 하기 때문에 Proccess 하나가 아니라 Window가 생성 될 때마다 메세지가 추가 된다. 예제 화면은 이 프로그램을 실행하고 탐색기를 실행했을 때 보이는 화면이다. 수많은 목록 중에서 ExploreWClass 가 탐색기 이다.

czxamch :: IHHepCZxr 2018/03/05  

Name Memo Password  
        


Prev
   [강좌] How to use C++ in MFC No.2 Virtual Method

조규남
Next
   System의 Process 를 모니터링 하는 프로그램 [1]

조규남


Copyright 1999-2018 Zeroboard / skin by JiYoo / edit by Mystous