【发布时间】:2013-04-30 04:30:16
【问题描述】:
我正在尝试使用 Win32 函数关闭由 Windows 上的进程持有的互斥锁。这可以使用 procexp 完成,但我需要在不使用 procexp GUI 的情况下以编程方式完成。
方法一:
我尝试使用 EasyHook 将 dll 注入进程,然后从注入的线程中尝试以下操作:
- 开放互斥
- ReleaseMutex
它给了我 ERROR_NOT_OWNER 错误,可能是因为发布是在与调用 AcquireMutex 的线程不同的线程上调用的。
方法二: 注入 dll 后,我尝试使用 mHook 挂钩 CreateMutex。挂钩的 CreateMutex 只是回调了原来的 CreateMutex。但这只会使应用程序崩溃。
我可以使用 procexp 来关闭互斥体,但我需要以编程方式进行。 procexp 是如何做到的?如何在没有任何内核模式代码的情况下以编程方式完成?
【问题讨论】:
-
ReleaseMutex 不是它的关闭方法。您需要在其上调用 CloseHandle。您想解除对互斥锁的阻塞还是关闭它的句柄? Process Explorer 只能关闭它。
-
它是一个进程持有的全局互斥锁。关闭它是否允许其他进程能够获取它?
-
从文档中不确定,但我希望 WaitForSingleObject 确实成功,但错误代码为 WAIT_ABANDONED。如果这不起作用,我会尝试使用内核模式驱动程序;-)
-
为什么要弄乱另一个进程打开的对象?这听起来像是消除症状,而不是解决问题。
-
我正在尝试启动同一个游戏的两个实例,但不允许使用互斥锁启动。我们获得了游戏厂商的授权,但在游戏中更难获得代码级别的变化。
标签: winapi