gpt4 book ai didi

c# - 当注册名称不唯一时,有什么方法可以从 ROT 获取对象?

转载 作者:行者123 更新时间:2023-11-30 12:35:11 31 4
gpt4 key购买 nike

我需要获取正在运行的对象的特定实例(来自 C#)。可能有此应用程序的多个实例正在运行。不幸的是,此应用程序始终以完全相同的名称(例如,“!{DED89DB0-45B6-11CE-B307-0800363A1E02}”)在 ROT 中注册。我可以使用显示的技术遍历 ROT here并找到我的应用程序的唯一实例,但是当我在 IRunningObjectTable 实例上使用 GetObject 方法时,它总是返回注册的第一个对象。

有什么方法可以得到那个特定对象的引用吗?这么近,但又那么远......

最佳答案

这是一件相当复杂的事情,没有真正的解决方案。我们在一个项目中解决它的方法如下:

- 您需要在 C++ 中创建应用程序(.NET 级别太高),用您自己的方法覆盖 RegisterActiveObject 和 RevokeActiveObject,安装一个 Hook 。
- 您需要先启动应用程序,然后再启动您的应用程序。
- 当代码启动时,它将监听事件以在 ROT 中创建新对象
- 你的代码需要拦截那个(覆盖 RegisterActiveObject)
- 检查注册对象是否是您感兴趣的对象
- 如果是,那么您可以修改它的名称(例如在末尾添加 PID)并添加到 ROT
- 现在你有例如以下元素

!{DED89DB0-45B6-11CE-B307-0800363A1E02}
!{DED89DB0-45B6-11CE-B307-0800363A1E02}
!{DED89DB0-45B6-11CE-B307-0800363A1E02}_3365
!{DED89DB0-45B6-11CE-B307-0800363A1E02}_4564

  • 现在最后 2 个条目指向您应用的不同实例,然后您可以通过名称从 ROT 中获取它。当然,添加 PID 只是一个示例,您可以根据需要修改名称(只要它保持唯一 - 这就是重点)。


    查看 psapi.h 和 dbghelp.h。


    祝你好运,
    布莱斯

关于c# - 当注册名称不唯一时,有什么方法可以从 ROT 获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082580/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com