当前位置:  开发笔记 > 编程语言 > 正文

如何通过C#中的进程获取打开文件句柄列表?

如何解决《如何通过C#中的进程获取打开文件句柄列表?》经验,为你挑选了4个好方法。

如何通过C#中的进程ID获取打开文件句柄列表?

我有兴趣挖掘并获取文件名.

寻找程序化等价的进程资源管理器.

这很可能需要互操作.

考虑到在此上添加赏金,实现是非常复杂的.



1> Sam Saffron..:

哎呀,托管代码很难做到这一点.

codeproject上有一个示例

大部分内容都可以在interop中完成,但是你需要一个驱动程序来获取文件名,因为它存在于内核的地址空间中.Process Explorer将驱动程序嵌入其资源中.从C#中获取这一切,并支持64位和32位,这将是一个令人头疼的问题.



2> Mark Cidade..:

您还可以运行Mark Rusinovich 的命令行应用程序Handle,并解析输出.


为什么选择@bruce?有什么理由吗?
使用句柄的唯一真正问题是许可证 - 你不能分发句柄,甚至不能免费软件.
这是一个可怕的解决方案.
您可以自动下载。

3> Mark Cidade..:

你可以P/INVOKE进入NtQuerySystemInformation函数来查询所有句柄,然后从那里开始.此Google小组讨论有详细信息.



4> manuc66..:

看看这个文件:http: //vmccontroller.codeplex.com/SourceControl/changeset/view/47386#195318

并使用:

DetectOpenFiles.GetOpenFilesEnumerator(processID);

演示:

using System;
using System.Diagnostics;

namespace OpenFiles
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var openFiles = VmcController.Services.DetectOpenFiles.GetOpenFilesEnumerator(Process.GetCurrentProcess().Id))
            {
                while (openFiles.MoveNext())
                {
                    Console.WriteLine(openFiles.Current);
                }
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

它依赖于汇编 System.EnterpriseServices

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有