2009年12月26日 星期六

CuHook - HookDLL.dll Adapter

// HookDLL.dll Adapter

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);

CuHook Hook;
Hook.Init(HookProc, WH_KEYBOARD_LL);



// CuHook.h

class CuHook
{
    typedef void (* LPFN_INITHOOK)(HOOKPROC lpfnCallBackHookProc, int idHook);
    LPFN_INITHOOK m_lpfnInitHook;

    typedef void (* LPFN_UNHOOK)(void);
    LPFN_UNHOOK m_lpfnUnHook;

    CuDllManager m_DllManager;

public:
    CuHook(void);
    ~CuHook(void);

    void Init(HOOKPROC lpfnCallBackHookProc, int idHook);
};



// CuHook.cpp

CuHook::CuHook(void)
:m_lpfnInitHook(NULL),
m_lpfnUnHook(NULL)
{
}

CuHook::~CuHook(void)
{
    if( m_lpfnUnHook != NULL )
        m_lpfnUnHook();
}


void CuHook::Init(HOOKPROC lpfnCallBackHookProc, int idHook)
{
    BOOL bLoadDll = m_DllManager.LoadLibrary(L"HookDll.dll");
    Assert( bLoadDll != NULL, TEXT("Don't Find HookDll.dll") );

    m_lpfnInitHook = (LPFN_INITHOOK)m_DllManager.GetProcAddress("InitHook");
    Assert( m_lpfnInitHook != NULL, TEXT("Don't Find function InitHook") );

    m_lpfnUnHook = (LPFN_UNHOOK)m_DllManager.GetProcAddress("UnHook");
    Assert( m_lpfnInitHook != NULL, TEXT("Don't Find function UnHook") );

    if( m_lpfnInitHook != NULL )
        m_lpfnInitHook(lpfnCallBackHookProc, idHook);
}

1 則留言:

  1. 對於 Thread or global 都商用的 WH_KEYBOARD 得在改進擴充, lpfnCallBackHookProc 的來源, 必需要是GetProcAddress從DLL裡叫出來的, 才能轉為global, 這個得在找時間測試!

    回覆刪除