我正在尝试使用Win32函数关闭Windows上进程持有的互斥锁。这可以使用procexp完成,但我需要在不使用procexp GUI的情况下以编程方式完成。
方法一:
我尝试使用EasyHook将dll注入到进程中,然后从注入的线程中尝试以下操作:
- OpenMutex
- ReleaseMutex
它给了我ERROR_NOT_OWNER错误可能是因为发布是在与调用AcquireMutex的线程不同的线程上调用的。
方法2: 注入dll后,我尝试使用mHook挂钩CreateMutex。钩住的CreateMutex只回调了原始的CreateMutex。但这只会使应用程序崩溃。
我可以使用procexp关闭互斥锁,但我需要以编程方式执行此操作。 procexp如何做到这一点?如何在没有任何内核模式代码的情况下以编程方式完成?
答案 0 :(得分:6)
使用NtQuerySystemInformation()检索打开句柄数组,遍历数组,直到在目标进程中找到所需的互斥锁句柄,然后通过指定DUPLICATE_CLOSE_SOURCE
使用DuplicateHandle()
关闭它标志。
以下文章更详细地解释了它:
答案 1 :(得分:0)
只需添加完整的答案。在识别互斥锁后,我必须将以下代码添加到handles.cpp:
HANDLE realHandle;
ret = DuplicateHandle(processHandle, (HANDLE)handle.Handle, GetCurrentProcess(), &realHandle, 0, TRUE, DUPLICATE_CLOSE_SOURCE);
if(!ret)
printf("DuplicateHandle Problem!");
if (!CloseHandle(realHandle))
{
printf("Problem closing the copied handle");
}
printf("", realHandle);
}