附加到另一个进程中的模块并调用公共方法?

时间:2013-07-22 13:37:17

标签: c# process

我不知道这是否可能出于安全原因,但可能是这样。

我在其中一个应用程序中发现了一个问题,修复它的方法是在进程内模块上调用公共方法。

因此,我的应用程序(我无法修改)使用一个名为'SSOSettingsFileReader.dll'的引用dll,在SSOSettingsFileReader.dll中是一个名为'ClearCache'的公共方法。我想编写一个循环遍历所有进程的控制台应用程序,在每个进程中搜索名为SSOSettingsFileReader的模块,并在每个进程上调用“ClearCache”。

这可能吗?

到目前为止,我可以获得该模块:

Process[] processes = Process.GetProcesses();

foreach (Process p in processes) {
    if (p.ProcessName == "BTSNTSvc") {
        ProcessModuleCollection modules = p.Modules;

        foreach (ProcessModule m in modules) {
            if (m.ModuleName == "SSOSettingsFileReader.dll") {
                // What to do here? 
                // SSOSettingsFileReader sso = SomeWayToConvertModule(m)ToSSOSettingsFileReader();
                // sso.ClearCache();
            }
        }
    }
}

由于

P.S。我正在使用VS2005和.Net2.0但不限于此

1 个答案:

答案 0 :(得分:0)

将代码注入进程并不是修复错误的最可靠方法。如果你确定没有其他选择,那就有可能。

CreateRemoteThread是您需要的核心,也就是您在远程进程中执行代码的方式。该函数需要一个线程入口点,因此您可能需要围绕ClearCache函数编译一个包装器并将其添加到目标进程中。 MSDN文档涵盖了安全要求。通常,用户将此调用注入到他们拥有的进程中应该没有问题。