|
시스템 후킹을 위해 아래와 같이 코딩했습니다. 데이터공유를 위해 여러가지 사이트를 뒤져서 pragma까지 왔습니다만..
KbdHookProc에서의 showmessage에는 계속적으로 값(g_cnt)이 증가하는데..
GetCount()에서는 계속 초기값 100으로 return을 합니다.
여러가지 방법을 써보았지만.. 잘안되는군요.. 혹시 제가 모르는 부분이 더 있는것인가요..
// hookat.dll header에는
#define EXPORT_DECL __declspec(dllexport)
extern "C" EXPORT_DECL void __stdcall KBHookIni( int instance );
extern "C" EXPORT_DECL void __stdcall UnKBHook( );
extern "C" EXPORT_DECL DWORD __stdcall GetCount();
// hookat.dll source에는
#pragma data_seg(".shared")//"SHARDATA")
__declspec(dllexport) DWORD g_cnt = 100;
#pragma data_seg()
#pragma comment(linker, "/SECTION:.shared,RWS")
HHOOK g_hKbdHook;
LRESULT __stdcall KbdHookProc(int code, WPARAM wParam, LPARAM lParam)
{
if ((code==HC_ACTION) && (lParam&0x80000000) && wParam == VK_F12 )
{
++g_cnt;
String msg;
msg.sprintf("int[%d]", g_cnt);
ShowMessage(msg);
} // end of if
return CallNextHookEx(g_hKbdHook, code, wParam, lParam);
}
void __stdcall KBHookIni( int instance )
{
// 키보드 훅을 설정합니다.
g_hKbdHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KbdHookProc, HInstance, 0);
// 핸들 값을 검사합니다.
if (!g_hKbdHook)
ShowMessage("키보드 훅 실패!");
}
void __stdcall UnKBHook( )
{
// 키보드 훅 제거
UnhookWindowsHookEx(g_hKbdHook);
}
DWORD __stdcall GetCount()
{
return g_cnt;
}
|