能力值:
( LV9,RANK:610 )
|
-
-
2 楼
判断last error如果是 ERROR_ALREADY_EXISTS就改成ERROR_SUCCESS,但返回的句柄不应是NULL
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不行啊
我的进程中CreateMutex 的代码是这样写的:
HANDLE hMutex;
hMutex = CreateMutex(NULL, FALSE, "TestAPP");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,"程序已经运行!","test",0);
return FALSE;
}
我将HOOK截获的 LPCSTR lpName 打印出来发现,是 MSCTF.Shared.MUTEX.MCG ,并不是我传进去"TestApp" ,为什么回这样?
|
能力值:
( LV9,RANK:610 )
|
-
-
4 楼
所以你还要验证一下互斥体的名字,只拦截你关心的
|
能力值:
( LV9,RANK:610 )
|
-
-
5 楼
随手写点代码给你:
HANDLE MyCreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpName
)
{
HANDLE hMutex=OldCreateMutex(lpMutexAttributes,bInitialOwner,lpName);
if (!lstrcmp(lpName,"TestApp"))
{
if (ERROR_SUCCESS==GetLastError())//第一次调用则正常返回
{
return hMutex;
}
if (ERROR_ALREADY_EXISTS==GetLastError())//第二次调用则仍然让它返回正常
{
SetLastError(ERROR_SUCCESS);
return hMutex;
}
}
else
{
return hMutex;
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
SetWindowsHookEx能勾住CreateMutexA吗?
|
能力值:
( LV9,RANK:610 )
|
-
-
7 楼
回楼上:两者没有直接关系,但你可以在SetWindowsHookEx安装的钩子DLL中Hook你感兴趣的函数
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
exe被钩住的时机发生在尝试去取消息的时刻,如果该exe运行时直接调用CreateMutex,这时候钩子是还没来得及挂钩的。
这一点LZ可以自己写一个调用CreateMutex的程序作测试,你可以发现,只有在CreateMutex之前执行过GetMessage的才可以被成功挂钩。
至于3L的问题,很可能是因为你自己调用的那次还没有勾搭上,勾搭上以后,被你截获的那次可能是其他库里面自己的调用。
|
能力值:
( LV3,RANK:30 )
|
-
-
9 楼
你写再多代码也没用
CreteMutex -> CreateWinows
问题是用SetWinowsEx晚了
|
能力值:
( LV3,RANK:30 )
|
-
-
10 楼
SetWinowsHookE
|
能力值:
( LV8,RANK:130 )
|
-
-
11 楼
这只是把dll弄到进程里面去吧。
|
|
|