【问题标题】:How to determine who changed a file?如何确定谁更改了文件?
【发布时间】:2009-08-05 08:22:08
【问题描述】:

在 Windows 中,如何以编程方式确定上次更改或删除文件的用户帐户?

我知道设置对象访问审计可能是一种选择,但如果我使用它,我就会遇到尝试将审计日志条目与特定文件匹配的问题......听起来很复杂而且很混乱!我想不出任何其他方法,那么有人对这种方法或任何替代方法有任何提示吗?

【问题讨论】:

    标签: c# windows monitoring filesystems


    【解决方案1】:

    你可以把你的问题分成两部分:

    1. 每当访问文件时写入日志。
    2. 解析、过滤并呈现日志的相关信息。

    在这两个部分 1 中,写入日志是您提到的通过审计的内置功能。重新发明它会很困难,而且可能永远不会像内置功能那样好。

    我会通过在这些文件上设置审核 ACL 来使用内置功能进行日志记录。然后,我将集中精力提供一个良好的界面来读取事件日志、过滤掉相关事件并以适合您的用户且相关的方式呈现它们。

    【讨论】:

    • 所以您提倡将 Windows 对象审核日志条目与文件名匹配?
    • 是的,我愿意。文件名在事件日志条目中以明文形式写入,因此应该不会太难。至少它应该比编写一个好的文件活动监视器简单得多,因为它可能需要 Grant Peters 建议的文件系统过滤器。
    【解决方案2】:

    您总是可以创建一个file system filter。这可能有点矫枉过正,但这取决于您的目的。您可以在启动时加载它,它几乎位于每次文件访问的背后(病毒扫描程序通常使用它来扫描文件,因为它们被访问)。

    只需要记录正在写入文件的应用程序的“所有者”。

    另见MSDN documentation

    【讨论】:

    • 我不相信这样的过滤器可以用托管代码编写?
    • @Cocowalla:不,这是不可能的(或者更准确地说:这会导致您的操作系统出现大量问题,在任何情况下都应该避免)
    【解决方案3】:

    我知道的唯一方法是设置一个 FileSystemWatcher 并保持它运行。哦,如果它通过网络驱动器,它可能会随机断开连接,因此每隔几个小时强制断开/重新连接可能会很好,以确保它有新的连接。

    【讨论】:

    • 虽然 FileSystemWatcher 会捕获对文件的更改,但我认为它不会捕获 who 更改文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多