Initial
This commit is contained in:
228
proto/dllmain.cpp
Normal file
228
proto/dllmain.cpp
Normal file
@@ -0,0 +1,228 @@
|
||||
#include <common/string.hpp>
|
||||
#include <common/stdio.hpp>
|
||||
#include <common/file.hpp>
|
||||
#include <common/console.hpp>
|
||||
#include <thread/mutex.hpp>
|
||||
#include <sgi_stl/map.h>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
__declspec(dllexport) bool FAR PASCAL unHook(void);
|
||||
__declspec(dllexport) bool FAR PASCAL setHook(void);
|
||||
}
|
||||
|
||||
bool validate(CREATESTRUCT &createStruct);
|
||||
|
||||
LRESULT CALLBACK cbtHookProc(int nCode,WPARAM wParam,LPARAM lParam);
|
||||
|
||||
LRESULT handleActive(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleClickSkipped(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleCreateWnd(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleDestroyWnd(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleKeySkipped(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleMinMax(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleMoveSize(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleQs(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleSetFocus(WPARAM wParam,LPARAM lParam);
|
||||
LRESULT handleSysCommand(WPARAM wParam,LPARAM lParam);
|
||||
|
||||
HHOOK smhHook=(HHOOK)0;
|
||||
Mutex mutex;
|
||||
File outFile("d:\\log.txt","a+b");
|
||||
|
||||
BOOL WINAPI DLLMain(HINSTANCE hDLLInst,DWORD dwReason,LPVOID lpReserved)
|
||||
{
|
||||
switch(dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH :
|
||||
::printf("Process attach\n");
|
||||
break;
|
||||
case DLL_PROCESS_DETACH :
|
||||
::printf("Process detach\n");
|
||||
break;
|
||||
case DLL_THREAD_ATTACH :
|
||||
::printf("Thread attach\n");
|
||||
break;
|
||||
case DLL_THREAD_DETACH :
|
||||
::printf("Thread detach\n");
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool FAR PASCAL setHook(void)
|
||||
{
|
||||
HINSTANCE hInst=::GetModuleHandle("cbtdll");
|
||||
if(!hInst)return false;
|
||||
smhHook=::SetWindowsHookEx(WH_CBT,(HOOKPROC)&cbtHookProc,hInst,0);
|
||||
return smhHook?true:false;
|
||||
}
|
||||
|
||||
bool FAR PASCAL unHook()
|
||||
{
|
||||
if(!smhHook)return false;
|
||||
::UnhookWindowsHookEx(smhHook);
|
||||
smhHook=0;
|
||||
return true;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK cbtHookProc(int nCode,WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
LRESULT result;
|
||||
if(nCode<0)return result=::CallNextHookEx(smhHook,nCode,wParam,lParam);
|
||||
switch(nCode)
|
||||
{
|
||||
case HCBT_ACTIVATE :
|
||||
result=handleActive(wParam,lParam);
|
||||
break;
|
||||
case HCBT_CLICKSKIPPED :
|
||||
result=handleClickSkipped(wParam,lParam);
|
||||
break;
|
||||
case HCBT_CREATEWND :
|
||||
result=handleCreateWnd(wParam,lParam);
|
||||
break;
|
||||
case HCBT_DESTROYWND :
|
||||
result=handleDestroyWnd(wParam,lParam);
|
||||
break;
|
||||
case HCBT_KEYSKIPPED :
|
||||
result=handleKeySkipped(wParam,lParam);
|
||||
break;
|
||||
case HCBT_MINMAX :
|
||||
result=handleMinMax(wParam,lParam);
|
||||
break;
|
||||
case HCBT_MOVESIZE :
|
||||
result=handleMoveSize(wParam,lParam);
|
||||
break;
|
||||
case HCBT_QS :
|
||||
result=handleQs(wParam,lParam);
|
||||
break;
|
||||
case HCBT_SETFOCUS :
|
||||
result=handleSetFocus(wParam,lParam);
|
||||
break;
|
||||
case HCBT_SYSCOMMAND :
|
||||
result=handleSysCommand(wParam,lParam);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// ************************************************************************************************
|
||||
|
||||
LRESULT handleActive(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleClickSkipped(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleCreateWnd(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
CBT_CREATEWND *pCBTCreateWnd;
|
||||
CREATESTRUCT *pCreateStruct;
|
||||
HWND hWnd;
|
||||
HWND hwndParent;
|
||||
String windowName;
|
||||
String parentText;
|
||||
String strLine;
|
||||
|
||||
hWnd=(HWND)wParam;
|
||||
pCBTCreateWnd=(CBT_CREATEWND*)lParam;
|
||||
if(!pCBTCreateWnd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
pCreateStruct=pCBTCreateWnd->lpcs;
|
||||
if(!pCreateStruct)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
hwndParent=pCreateStruct->hwndParent;
|
||||
windowName=pCreateStruct->lpszName;
|
||||
parentText.reserve(String::MaxString);
|
||||
::GetWindowText(hwndParent,parentText,String::MaxString);
|
||||
|
||||
strLine.reserve(1024);
|
||||
::sprintf(strLine.str(),"window name=%s, parent=%s",windowName.str(),parentText.str());
|
||||
|
||||
mutex.requestMutex();
|
||||
outFile.writeLine(strLine);
|
||||
outFile.flush();
|
||||
mutex.releaseMutex();
|
||||
|
||||
if(!validate(*pCreateStruct))
|
||||
{
|
||||
outFile.writeLine("Not allowing child window to activate");
|
||||
outFile.flush();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleDestroyWnd(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleKeySkipped(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleMinMax(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleMoveSize(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleQs(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleSetFocus(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT handleSysCommand(WPARAM wParam,LPARAM lParam)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
STDAPI DllCanUnloadNow(void)
|
||||
{
|
||||
::printf("DllCanUnloadNow\n");
|
||||
return S_OK; // S_FALSE
|
||||
}
|
||||
|
||||
STDAPI DllUnregisterServer(void)
|
||||
{
|
||||
::printf("DllUnregisterServer\n");
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
bool validate(CREATESTRUCT &createStruct)
|
||||
{
|
||||
String parentText;
|
||||
String moduleFileName;
|
||||
|
||||
moduleFileName.reserve(512);
|
||||
::GetModuleFileName(createStruct.hInstance,moduleFileName.str(),512);
|
||||
outFile.writeLine(moduleFileName);
|
||||
parentText.reserve(String::MaxString);
|
||||
::GetWindowText(createStruct.hwndParent,parentText,String::MaxString);
|
||||
// if(parentText==String("Internet Explorer"))return false;
|
||||
// if(parentText==String("Microsoft Internet Explorer"))return false;
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user