Q&A

  • hooking ?
델초보임당...아래 기술문서를 보시구



구현 부탁 드립니당..^^





WIN32 SDK



버전:윈도우95고객기술지원부(PSS)



제목:윈도우95에서 시스템



전반-훅(hook)을 만들어 사용하는 방법



Application Note



4/3/97 - WIN32SDK0017



내용: 3페이지



요 약



윈도우95는 AppInit_DLLs라는 레지스트리 값을 이용하여



프로세스의 어드레스 공간에 DLL이 로드되게 하는 기능을



지원하지 않는다.



윈도우 NT에서는 모든 프로세스가 실행될 때 AppInit_DLLs



레지스트리 값에 리스트된 DLL들을 실행되는 프로세스



어드레스 공간에 로드한다.



윈도우 95에서는 이와 유사한 기능을 시스템-전반 훅(hook)을



이용하여 구현 가능하다.



여기에서는 시스템-전반 훅(hook)을 이용하여 구현하는



방법을 설명한다.



추가 정보



시스템-전반 훅(hook)을 이용하려면 반드시 DLL내에



훅킹될 함수(콜백 함수)가 있어야 한다. 그다음,



이 함수가 콜 될 때, 윈도우95는 타겟 어플리케이션에로



훅 DLL을 맵핑해야 한다.



그러면 실제 훅킹된 함수가 타겟 어플리케이션의



일부로써 실행된다.



시스템-전반 훅(hook)을 생성하려면 다음의



2단계의 코딩이 필요하다.



1. 훅킹 함수로 사용될 익스포트 함수가



포함된 DLL을 만든다.



여기에서는 WH_KEYBOARD 시스템-전반 훅(hook)을 구현하는



함수의 이름은 HookFunction인 콜백 함수로 선언한다:



// 키보드 메시지를 가로챈다.



__declspec(dllexport) LRESULT CALLBACK HookFunction(

int code,

WPARAM wParam,

LPARAM lParam)

{

char szVCode[50];



// 가로채진 가상 키 코드를 메시지박스에서 보여 준다.



sprintf(szVCode, "가상 키 코드: %lx", wParam);

MessageBox(NULL, szVCode,"키가 눌려짐 ", MB_OK);

:

}



이 DLL의 모듈 정의 파일에는 다음과 같이 선언되어야 한다:



LIBRARY HOOK



EXPORTS

HookFunction



2. 시스템-전반 훅을 설치한다. 훅을 설치하려면,



DLL이 로드되어야 하고, 훅 함수의 어드레스를



GetProcAddress를 이용하여 알아낸후,SetWindowsHookEx를



콜한다. 다음은 예이다:



// 시스템-전반 훅을 추가한다.

hHookDll = LoadLibrary("hook");

hHookProc = (HOOKPROC) GetProcAddress(hHookDll, "HookFunction");



// 모든 키보드 메시지를 가로채는 키보드 훅을 설치한다.



hSystemHook = SetWindowsHookEx(WH_KEYBOARD,hHookProc,hHookDll,0);



시스템-전반 훅을 이용하는 어플리케이션을 종료한 뒤



시스템-전반 훅을 언훅(unhook)하는 작업을 다음과 같이 해야 한다:



// 훅을 제거하고 훅에 사용되었던 DLL을 해제한다

UnhookWindowsHookEx(hSystemHook);

FreeLibrary(hHookDll);



참고 자료

Win32 SDK Reference



(주)마이크로소프트 고객기술지원부

1  COMMENTS
  • Profile
    안경잡이 2000.04.14 06:03
    궁금한것이 무엇인지 궁금하네요..



    델파이에서는 기본적으로 TWinControl개체가 메세지를 Hook하고 있으므로 message를 override하셔서 구현하시면 될거 같은데... 궁금한것을 구체적으로 알고 싶네요 ^^

    델초보 wrote:

    > 델초보임당...아래 기술문서를 보시구

    >

    > 구현 부탁 드립니당..^^

    >

    >

    > WIN32 SDK

    >

    > 버전:윈도우95고객기술지원부(PSS)

    >

    > 제목:윈도우95에서 시스템

    >

    > 전반-훅(hook)을 만들어 사용하는 방법

    >

    > Application Note

    >

    > 4/3/97 - WIN32SDK0017

    >

    > 내용: 3페이지

    >

    > 요 약

    >

    > 윈도우95는 AppInit_DLLs라는 레지스트리 값을 이용하여

    >

    > 프로세스의 어드레스 공간에 DLL이 로드되게 하는 기능을

    >

    > 지원하지 않는다.

    >

    > 윈도우 NT에서는 모든 프로세스가 실행될 때 AppInit_DLLs

    >

    > 레지스트리 값에 리스트된 DLL들을 실행되는 프로세스

    >

    > 어드레스 공간에 로드한다.

    >

    > 윈도우 95에서는 이와 유사한 기능을 시스템-전반 훅(hook)을

    >

    > 이용하여 구현 가능하다.

    >

    > 여기에서는 시스템-전반 훅(hook)을 이용하여 구현하는

    >

    > 방법을 설명한다.

    >

    > 추가 정보

    >

    > 시스템-전반 훅(hook)을 이용하려면 반드시 DLL내에

    >

    > 훅킹될 함수(콜백 함수)가 있어야 한다. 그다음,

    >

    > 이 함수가 콜 될 때, 윈도우95는 타겟 어플리케이션에로

    >

    > 훅 DLL을 맵핑해야 한다.

    >

    > 그러면 실제 훅킹된 함수가 타겟 어플리케이션의

    >

    > 일부로써 실행된다.

    >

    > 시스템-전반 훅(hook)을 생성하려면 다음의

    >

    > 2단계의 코딩이 필요하다.

    >

    > 1. 훅킹 함수로 사용될 익스포트 함수가

    >

    > 포함된 DLL을 만든다.

    >

    > 여기에서는 WH_KEYBOARD 시스템-전반 훅(hook)을 구현하는

    >

    > 함수의 이름은 HookFunction인 콜백 함수로 선언한다:

    >

    > // 키보드 메시지를 가로챈다.

    >

    > __declspec(dllexport) LRESULT CALLBACK HookFunction(

    > int code,

    > WPARAM wParam,

    > LPARAM lParam)

    > {

    > char szVCode[50];

    >

    > // 가로채진 가상 키 코드를 메시지박스에서 보여 준다.

    >

    > sprintf(szVCode, "가상 키 코드: %lx", wParam);

    > MessageBox(NULL, szVCode,"키가 눌려짐 ", MB_OK);

    > :

    > }

    >

    > 이 DLL의 모듈 정의 파일에는 다음과 같이 선언되어야 한다:

    >

    > LIBRARY HOOK

    >

    > EXPORTS

    > HookFunction

    >

    > 2. 시스템-전반 훅을 설치한다. 훅을 설치하려면,

    >

    > DLL이 로드되어야 하고, 훅 함수의 어드레스를

    >

    > GetProcAddress를 이용하여 알아낸후,SetWindowsHookEx를

    >

    > 콜한다. 다음은 예이다:

    >

    > // 시스템-전반 훅을 추가한다.

    > hHookDll = LoadLibrary("hook");

    > hHookProc = (HOOKPROC) GetProcAddress(hHookDll, "HookFunction");

    >

    > // 모든 키보드 메시지를 가로채는 키보드 훅을 설치한다.

    >

    > hSystemHook = SetWindowsHookEx(WH_KEYBOARD,hHookProc,hHookDll,0);

    >

    > 시스템-전반 훅을 이용하는 어플리케이션을 종료한 뒤

    >

    > 시스템-전반 훅을 언훅(unhook)하는 작업을 다음과 같이 해야 한다:

    >

    > // 훅을 제거하고 훅에 사용되었던 DLL을 해제한다

    > UnhookWindowsHookEx(hSystemHook);

    > FreeLibrary(hHookDll);

    >

    > 참고 자료

    > Win32 SDK Reference

    >

    > (주)마이크로소프트 고객기술지원부