我如何杀死管道?

时间:2012-07-18 05:05:22

标签: .net visual-c++

我需要在vc ++ .net

中执行这三个步骤

1。 杀死原始管道

2。 制作新管道

3. 摆脱正在使用新管道的正在运行的应用程序

使用Process explorer并使用按钮('Find Handle或DLL')和命令(“\ Device \ NamedPipe \”),我发现我需要杀死并重新创建的namedpipe将是(“\ Device \” NamedPipe \ C:\ Users \ Andrew \ Desktop \ The Library \ Media \ Games \ Nexon \ MapleStory \ BlackCipher \ NexonGuard“)。

引用也是它有1个句柄。

如果可能,我将如何获取管道名称而不是使用Process Explorer。

我只想问我如何开始这3个步骤,我将在vc ++ .net中对此进行编码。

1 个答案:

答案 0 :(得分:2)

  1. 一般来说,你不能。与任何其他执行对象(文件,注册表项等)一样,管道在该对象的所有句柄都关闭之前不会被销毁。您必须使用管道强制进程关闭它。

  2. 您可以通过调用CreatePipe来创建新管道。

  3. 没有记录的方法可以做到这一点。您需要遍历每个进程的句柄表以查看它们是否具有给定管道的句柄,然后在该进程上调用TerminateProcess。很可能你需要采取SeDebugPrivilege来做到这一点。 (如果你实际上试图绕过反作弊系统,那么取得这个特权并检查有关程序的内容可能会引起一些关注;)

  4. 进程资源管理器通过加载到内核(驱动程序)来实现#3,但是从Visual Studio这样的东西不能实现 - 您需要学习编写驱动程序,而这些驱动程序是使用Windows驱动程序工具包构建的。