C# C:启动一个应用程序并处理它对系统的IO调用

C# C:启动一个应用程序并处理它对系统的IO调用,第1张

概述我需要启动其他应用程序并处理它的I / O *** 作.因此,当它尝试读/写文件时,我需要捕获它并更改路径. 它应该是可能的,因为有些程序可以做这样的事情(比如ModOrganizer). 问题是我不想使用文件系统过滤器驱动程序.我不想让我的应用程序的用户安装这样的东西. 正如我所看到的,ModOrganizer通过几种方式完成这项工作,包括proxy.dll,hooks e.t.c.不知何故,它实现了几 我需要启动其他应用程序并处理它的I / O *** 作.因此,当它尝试读/写文件时,我需要捕获它并更改路径.

它应该是可能的,因为有些程序可以做这样的事情(比如Modorganizer).

问题是我不想使用文件系统过滤器驱动程序.我不想让我的应用程序的用户安装这样的东西.

正如我所看到的,Modorganizer通过几种方式完成这项工作,包括proxy.dll,hooks e.t.c.不知何故,它实现了几乎任何程序都可以从它启动的目标,Modorganizer将处理对特定目录的请求.

github上有源代码,但我真的不明白.这就是为什么我在这里问这个.

同样,Modorganizer实现了这一点,而无需反编译每个可能的程序,以了解注入的位置.它不使用系统过滤器.

(请解释你的弊端.否则我将来如何改进我的问题?)

解决方法 您需要的是修改进程中每个模块的导入表.

看起来你提到的程序使用类似于这里描述的技术:https://www.codeproject.com/Articles/2082/API-hooking-revealed在“使用CreateRemoteThread()API函数注入DLL”部分.但是它不是使用远程线程,而是强制主程序线程完成它的工作(参见函数injectDLL):

https://github.com/TanninOne/modorganizer/blob/4a582e524dd012ed9d5fdb4f9c97aab22c8dac85/src/spawn.cpp

请注意,有一个标志CREATE_SUSPENDED传递给CreateProcess函数 – 这有助于它在主线程能够执行任何 *** 作之前存根所有函数.

它不是修补导入表,而是插入用汇编编写的存根(参见函数injectDLL):

https://github.com/TanninOne/modorganizer/blob/4a582e524dd012ed9d5fdb4f9c97aab22c8dac85/src/shared/inject.cpp

Jeffrey Richter在他的“windows via C/C++”一书中有一个关于如何修补导入表的好例子.您可以尝试查找和阅读完整的书籍,也可以在此查看代码:https://github.com/lattesir/WindowsViaCPP/blob/master/22-LastMsgBoxInfoLib/APIHook.cpp

但是你的程序可能看起来像任何反病毒软件的病毒.

@H_419_46@ 总结

以上是内存溢出为你收集整理的C#/ C:启动一个应用程序并处理它对系统的I / O调用全部内容,希望文章能够帮你解决C#/ C:启动一个应用程序并处理它对系统的I / O调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1221179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存