首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Windows中覆盖应用程序的单实例限制?

如何在Windows中覆盖应用程序的单实例限制?
EN

Stack Overflow用户
提问于 2012-11-30 18:21:05
回答 1查看 923关注 0票数 1

我正在尝试覆盖一个我没有源代码的应用程序的单实例限制。我知道这个应用使用了一个很好的技巧--使用CreateMutex来判断是否有另一个实例在运行。(如果互斥锁创建成功,则继续执行;如果getlasterror显示互斥锁已创建,则立即退出)。我通过嗅探Win32应用程序接口调用发现了这一点。我原以为使用Detour会起到作用,但它并不是很有效。我正在拦截CreateMutexW,但由于某种原因,它没有捕获对它的前四个调用。(同样,我通过嗅探win32调用并查看互斥锁的名称来知道这些调用是什么)。我确实拦截了第五个,但实际上我想拦截的是第一个。

我在示例应用程序中使用the绕道而行。我想知道问题是不是走弯路太晚了,还是因为这些呼叫可能有某种保护。绕道是最好的方法吗?也许使用其他东西可能是个更好的主意?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-13 00:44:04

你所描述的情况可能有几个原因。以下是其中最有可能的几个:

  1. 您需要捕获的CreateMutexW调用发生在进程导入的某个DLL的DllMain方法中,您正在使用DetoursCreateProcessWithDll()函数注入您的代码。通过将您的DLL放在进程可执行文件导入列表的末尾来注入DLL,因此进程导入的所有DLL都将在您的进程之前加载和初始化。为了克服这个问题,可以尝试使用CreateProcess(CREATE_SUSPENDED)和CreateRemoteThread()-based注入,尽管这种方法本身会带来一些挑战。
  2. 第一次调用的接口不同。你有没有试过覆盖CreateMutexExW?您确定ANSI方法调用Unicode方法吗?

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13643236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档