procexp如何关闭另一个进程持有的互斥锁?

时间:2013-04-30 04:30:17

标签: winapi

我正在尝试使用Win32函数关闭Windows上进程持有的互斥锁。这可以使用procexp完成,但我需要在不使用procexp GUI的情况下以编程方式完成。

方法一: 我尝试使用EasyHook将dll注入到进程中,然后从注入的线程中尝试以下操作:   - OpenMutex
  - ReleaseMutex 它给了我ERROR_NOT_OWNER错误可能是因为发布是在与调用AcquireMutex的线程不同的线程上调用的。

方法2: 注入dll后,我尝试使用mHook挂钩CreateMutex。钩住的CreateMutex只回调了原始的CreateMutex。但这只会使应用程序崩溃。

我可以使用procexp关闭互斥锁,但我需要以编程方式执行此操作。 procexp如何做到这一点?如何在没有任何内核模式代码的情况下以编程方式完成?

2 个答案:

答案 0 :(得分:6)

使用NtQuerySystemInformation()检索打开句柄数组,遍历数组,直到在目标进程中找到所需的互斥锁句柄,然后通过指定DUPLICATE_CLOSE_SOURCE使用DuplicateHandle()关闭它标志。

以下文章更详细地解释了它:

HOWTO: Enumerate handles

答案 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);  
  }