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

Winapi procexp如何关闭另一进程持有的互斥锁?,winapi,Winapi,我正在尝试关闭Windows上使用Win32函数的进程持有的互斥锁。这可以使用procexp完成,但我需要以编程方式完成,而不需要使用procexp GUI 方法1: 我尝试使用EasyHook将dll注入进程,然后尝试从注入的线程执行以下操作: -OpenMutex -释放互斥 它给了我一个错误\u NOT \u OWNER错误,可能是因为调用该版本的线程与调用AcquireMutex的线程不同 方法2: 注入dll后,我尝试使用mHook钩住CreateMutex。钩住的CreateMute

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

方法1: 我尝试使用EasyHook将dll注入进程,然后尝试从注入的线程执行以下操作: -OpenMutex
-释放互斥 它给了我一个错误\u NOT \u OWNER错误,可能是因为调用该版本的线程与调用AcquireMutex的线程不同

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

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

用于检索打开句柄的数组,在数组中循环,直到在目标进程中找到所需的互斥句柄,然后通过指定
DUPLICATE\u close\u SOURCE
标志将其关闭

下面的文章对此进行了更详细的解释:


只需添加一个完整的答案。在识别互斥对象后,我必须在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);  
  }  

ReleaseMutex不是它的封闭方法。你需要打电话给CloseHandle。是否要解除对互斥锁的阻止或关闭其句柄?Process Explorer只能关闭它。它是由进程持有的全局互斥锁。关闭它会让其他进程能够获取它吗?从文档中不确定,但我希望WaitForSingleObject会成功,但错误代码WAIT_被放弃。如果这不起作用,我将尝试使用内核模式驱动程序;-)为什么要处理由另一个进程打开的对象?这听起来像是在消除症状,而不是解决问题。我正在尝试启动同一个游戏的两个实例,它们不允许使用互斥锁启动。我们获得了游戏制造商的授权,但在游戏中很难获得代码级别的更改。显然,如果
DuplicateHandle()
失败,请不要调用
CloseHandle()
,因为没有要关闭的内容。最后一个
printf()
没有输出任何内容,因为没有提供格式说明符。