0

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

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

因此,我的应用程序(我无法修改)正在使用一个名为“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();
            }
        }
    }
}

谢谢

ps 我正在使用 .Net2.0 的 VS2005 但不限于此

4

1 回答 1

0

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

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

于 2013-07-22T17:59:44.800 回答