api hook 使用中碰到的问题~~
只爱浓茶 2008-10-22 11:09:16 对话框程序通过使用CreateMutexA 来达到防止重复运行的问题,我想通过APIHOOK 来解决这个问题,使得进程可以重复运行,我用APIHOOK 钩到了 CreateMutexA ,然后直接Return NULL; 可是进程中的CreateMutexA 还是成功创建了互斥对象,好奇怪
对话框中的CreateMutex 代码:
===========================================================================
HANDLE hMutex;
hMutex = CreateMutex(NULL, FALSE, "TestAPP");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,"程序已经运行!","test",0);
return FALSE;
}
===========================================================================
钩子函数:
===========================================================================
HANDLE WINAPI CModuleScope::MyCreateMutexA( LPSECURITY_ATTRIBUTES lpMutexAttributes,BOOL bInitiaOwner, LPCSTR lpName)
{
char szBuffer[MAX_PATH];
sprintf_s(szBuffer, "Process (%u%d) CreateMutex Now ! Let's Return NULL", ::GetCurrentProcessId(),u);
LogMessage(szBuffer);
return NULL;
}
============================================================================
api hook 是以SetWindowsHookEx来实现的,后来我尝试钩住进程的GetLastError() ,在我的钩子函数中直接SetLastError(0),结果还是不行。
请问各位大侠,用api hook 应该怎么做才能解决进程通过CreateMutexA 来防止重复运行的问题??