c# - 是否有可能劫持标准输出

标签 c# c++ windows winapi

我正在尝试使用 C# 重定向已在 Windows XP 上运行的进程的标准输出。我知道如果我自己生成进程我可以做到这一点,但对于这个应用程序我更喜欢一个“监听器”我可以附加到另一个进程。

这在纯 .Net 中是否可行?如果不行,在 Win32 中是否可行?

谢谢

更新:我正在尝试监视多个进程,它们都是由“看门人”进程启动的,如果它们崩溃,这些进程将重新启动。这让我很难预先进行任何重定向。

最佳答案

使用 Detours Library 在 Win32 中相当做到这一点.您将查看对 WriteFile 的所有调用,并检查它们是否转到标准输出。您可能还想查看控制台输出函数(例如 WriteConsoleOutput),但它们很少使用,因此您可能不需要为大多数程序使用而费心。

我不记得 detours 是否直接支持使用 .NET 语言。如果没有,我想您仍然可以通过 P/Invoke 使用它,但我认为它一点也不漂亮...

编辑:周围有各种类似的(免费)图书馆。例如,Jeffrey Richter 的书 Advanced Windows 曾经包括一个应该用于此目的的工具。快速浏览一下就会发现,他目前的 Windows via C/C++ 仍然包含一个关于“DLL 注入(inject)和 API Hook ”的部分。这可能包括(和更新版本)相同的代码,这些代码应该足以完成此类工作。

关于c# - 是否有可能劫持标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574773/

相关文章:

c++ - 在 windows 下获取实际屏幕 dpi/ppi

c - 在 C (Windows) 中使用 USB

c# - 使用 XMPP 和 C#.NET 创建 Instante Messenger

c# - 如果没有要返回的结果集,查询似乎真的很慢

c++ - 逗号运算符有什么作用?

c++ - 我需要一些 C++ 结构建议

c++ - 初始化列表是否总是在构造函数代码之前处理?

c++ - Windows Unicode C++ 流输出失败

c# - Magento 从 C# 应用程序通过 SOAP 添加产品

c# - 关于多用户全局变量的思考