【问题标题】:How to monitor file system access on Windows (C#) - not only changes but access如何在 Windows (C#) 上监视文件系统访问 - 不仅更改而且访问
【发布时间】:2012-10-07 09:47:47
【问题描述】:

我已经尝试过 filesystemwatcher - 但监视对文件的访问是没有用的。有没有接口可以这样做?

【问题讨论】:

  • 您可以在本地安全策略中开启对象访问审计,它会在安全事件日志中生成审计事件。我不确定您为什么要尝试编写自己的代码来执行此操作。
  • 请扩展您的问题。首先,您尝试过什么?在网上搜索 “windows 检测文件访问” 会得到很多点击,例如 this。此外,如果你告诉为什么你想这样做,这个问题可以得到更好的回答。也许有比观看文件更好的解决方案,例如让用户通过您的应用程序打开文件。但这一切都取决于你想做什么。

标签: c# filesystems ntfs audit


【解决方案1】:

抓住UnauthorizedAccessException,如果被抓住了,你就无权访问了。

【讨论】:

    【解决方案2】:

    你可以阅读更多关于FileIOPermission类的信息。

    或使用这样的自定义方法:

    public static bool HasWritePermissionOnDir(string path)
    {
      var writeAllow = false;
      var writeDeny = false;
      var accessControlList = Directory.GetAccessControl(path);
      if(accessControlList == null)
         return false;
      var accessRules = accessControlList.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
      if(accessRules ==null)
       return false;
    
      foreach (FileSystemAccessRule rule in accessRules)
      {
          if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write) 
            continue;
    
          if (rule.AccessControlType == AccessControlType.Allow)
            writeAllow = true;
          else if (rule.AccessControlType == AccessControlType.Deny)
            writeDeny = true;
      }
    
      return writeAllow && !writeDeny;
    }
    

    【讨论】:

      【解决方案3】:

      对于简单的审计,您可以使用审计策略。如果您想在实际访问发生之前采取行动(或基于一些复杂的逻辑阻止访问)m,那么您需要使用文件系统 filter 驱动程序。编写您自己的(内核模式驱动程序编写技能和几个月的工作)或使用我们的 CallbackFilter 产品,该产品提供驱动程序并允许您在包括 .NET 在内的用户模式下编写业务逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-03
        • 1970-01-01
        • 2017-05-21
        • 2016-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-25
        相关资源
        最近更新 更多