【问题标题】:Is it possible to create an application to check every opened file on windows? [closed]是否可以创建一个应用程序来检查 Windows 上每个打开的文件? [关闭]
【发布时间】:2011-12-10 12:47:07
【问题描述】:

我想构建一个应用程序(如果还没有的话)来记录在 C# 上打开的每个 Windows(7、64 位)文件(包括属性)。

你怎么看?有可能吗?是否已经构建了其他软件来执行此操作?我是否需要使用低级语言 (C?) 并管理内核事件?

【问题讨论】:

  • 看看 filemon 或者它的替代 processmon:technet.microsoft.com/en-us/sysinternals/bb896642 它应该完全符合您的需要,但不是开源的。
  • 看起来不错!但它只显示 *.exe 打开的文件,而不是它的属性 :( 我的意思是,如果我打开这个 c:/programs/file.exe /my-attributes 我怎么能抓住 /my-attributes
  • 不,procmon 将显示所有打开的文件
  • 我猜我和大卫一样困惑。您想监视打开的文件还是要监视所有正在运行的进程以及从这些进程创建进程期间提供的参数?您的评论建议后者。

标签: c# c windows logging kernel


【解决方案1】:

我的意思是,如果我打开这个 c:/programs/file.exe /my-attributes 我该如何捕捉 /my-attributes

您真正需要的是用于启动进程的命令行。与试图发现进程打开了哪些文件完全不同的问题。还有一个你可以用 C# 做的,使用 System.Management 在 Win32_Process 类上运行查询。启动一个新的控制台模式项目并添加对 System.Management 的引用。使代码如下所示:

using System;
using System.Management;  // NOTE: add a reference to System.Management!

class Program {
    static void Main(string[] args) {
        ManagementObjectSearcher searcher =
            new ManagementObjectSearcher("root\\CIMV2",
            "SELECT * FROM Win32_Process");

        foreach (ManagementObject queryObj in searcher.Get()) {
            Console.WriteLine(queryObj["CommandLine"]);
        }
        Console.ReadLine();
    }
}

注意输出不是很干净,需要解析。某些进程可能会显示其内部 Windows 路径(例如 \??\etc),某些进程没有完整路径名。查看Win32_Process class documentation 以了解其他可用的属性。

【讨论】:

  • +1 这可能需要与ManagementEventWatcher 结合以获取进程启动和停止的通知
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2023-03-31
  • 2021-03-23
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多