【问题标题】:How do i determine which files are created or manipulated by a specific process programatically in c# windows OS我如何确定哪些文件是由特定进程在 c# windows OS 中以编程方式创建或操作的
【发布时间】:2021-02-05 08:20:50
【问题描述】:

我正在编写一个实用程序,它必须跟踪安装。

此安装会在我的计算机上创建哪些目录和文件。

语言是c#.net,操作系统是windows。

到目前为止,我使用了 FileWatcher,这是前进的一步,但是您必须清理很多操作系统噪音,最终结果是一个带有文件系统更改的文本文件,并且容易出错,导致无法使用。

我什至对其进行了过滤,以便仅跟踪运行安装的用户(BUILTIN\Administrators)的事件,但仍然有很多噪音。

.
.
.

owner = (new FileInfo(e.FullPath).GetAccessControl().GetOwner(typeof(SecurityIdentifier)).Translate(typeof(NTAccount)) as NTAccount).Value;

if (owner.Contains("BUILTIN\\" + "Administratorer"))
   {
      eventList.Add(">" + e.FullPath + "<" + e.ChangeType + ":" + owner);
   }
.
.
.

我也尝试使用 microsoft 的“handle64.exe -p processname.exe”的输出,但它只拍摄快照,在安装过程中无法继续运行。

有没有人知道如何在 c# 中实现它,或者是否有可能。

非常感谢您的时间和精力

【问题讨论】:

  • 我认为可以做到,但 C# 可能是该工作的错误工具。了解Procmon 如何监控文件系统和注册表事件并准确了解涉及的进程。但我认为这样做是通过放置许多低级钩子来实现的
  • 谢谢,我检查一下,也许我可以从 c# 调用它并创建一个我可以在代码中处理的输出。
  • 无法让它工作。

标签: c# file detection file-watcher


【解决方案1】:

您将需要使用 windows api 函数来确定哪些进程对您正在寻找的文件有句柄,特别是 NtQuerySystemInformation api 函数来查询所有句柄,这可以通过 P/Invoke 实现。

【讨论】:

  • 谢谢,我会调查的。
  • 您使用P/INVOKE 使用NtQuerySystemInformation api 函数查询所有句柄。
  • 我不知道该怎么做。我对 c# 很陌生,并且只有一门课程,所以我是一个完整的初学者。不过谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 2011-05-17
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多