如何在Windows上监视文件系统访问(C#) - 不仅仅是更改而是访问

时间:2012-10-17 07:24:58

标签: c# filesystems ntfs audit

我尝试过filesystemwatcher - 但是监视对文件的访问没有用。有没有这样做的界面?

3 个答案:

答案 0 :(得分:1)

抓住UnauthorizedAccessException,如果抓住,则您无权访问。

答案 1 :(得分:0)

您可以阅读有关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;
}

答案 2 :(得分:0)

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