File Monitor, File Audit and File I/O Activities Monitor SDK

下载 EaseFilter File Monitor Filter Driver SDK 安装文件
下载 EaseFilter File Monitor Filter Driver SDK 压缩文件
EaseFilter 文件 I/O 监视器

EaseFilter File Monitor SDK 可让您开发文件审计和文件监控 Windows 应用程序,实时监控文件更改和文件访问,拦截文件 I/O 请求,了解谁、何时、访问了哪些文件,从而在文件系统级别监控文件活动。

EaseFilter File Monitor SDK 是一个文件系统过滤驱动程序,它是一个内核模式组件,作为文件系统上方 Windows 执行程序的一部分运行。EaseFilter 文件系统过滤驱动程序可以拦截针对文件系统或其他文件系统过滤驱动程序的请求。通过在请求到达预定目标之前对其进行拦截,过滤驱动程序可以扩展或替换请求的原始目标所提供的功能。EaseFilter 文件系统过滤驱动程序可以记录、观察、修改甚至阻止一个或多个文件系统或文件系统卷的 I/O 操作。

监控文件更改事件

使用 EaseFilter File Monitor SDK,当管理的文件发生以下事件时,您就能收到通知:

  • 文件创建事件:您可以在创建新文件时收到通知。
  • 文件删除事件:文件被删除时您可以收到通知。
  • 文件重命名事件:文件重命名时您可以收到通知。
  • 文件写入事件:当文件写入数据时您可以获得通知。
  • 文件安全性更改事件:文件安全性更改时您可以收到通知。
  • 文件信息更改事件:当文件的大小、文件的属性、文件的最后写入时间、文件的创建时间、 文件的上次访问时间已更改。
实时监控文件 I/O 活动

使用 EaseFilter File Monitor SDK,您可以实时监控文件系统级别的文件 I/O 活动。您可以捕获文件打开、文件创建、文件覆盖、文件读取、文件写入、文件信息查询、文件信息设置、安全信息查询、安全信息设置、文件重命名、文件删除、目录浏览和文件关闭等 I/O 请求。

你可以创建文件访问日志,知道谁、何时、访问了哪些文件。通过跟踪和监控所有用户和文件活动、权限变更、存储容量,并生成实时审计报告,你可以对用户和数据进行全面控制并获得可见性。

监控特定进程或用户的文件访问权限

要监控文件 I/O,可以设置多个文件过滤规则。在文件过滤规则中,可以设置哪些进程或用户可以监控文件 I/O,可以设置只能监控特定文件 I/O 的文件过滤掩码,可以用文件打开选项过滤文件 I/O,可以注册文件更改事件或注册特定文件 I/O。

  • 设置过滤规则的文件过滤掩码:可以使用通配符创建文件过滤掩码,即c:\test\*。 txt,监控驱动只监控c:\test文件夹下的文本文件。
  • 设置排除文件过滤掩码:您可以从文件过滤规则中排除文件,即*.exe,所有.exe文件将被排除 从过滤规则中排除。
  • 设置包含进程名称:监视器驱动程序将仅监视来自包含进程的 I/O。
  • 设置排除进程名称:监视器驱动程序将从排除进程中排除 I/O。
  • 设置包含用户名:监控驱动程序将仅监控来自包含用户的 I/O。
  • 设置排除用户名:监视器驱动程序将排除排除用户的 I/O。
  • 设置文件打开过滤器选项:您可以仅监控使用特定选项 DesiredAccess、Disposition 或 CreateOptions 打开的文件的 I/O。 不为 0。
  • 注册文件更改事件:文件更改时您可以收到通知。 仅当文件句柄关闭时才会发送文件更改事件。
  • 注册特定文件 I/O 事件:当您的设置触发特定文件 I/O 时,您可以收到通知。 文件 I/O 事件在注册的 I/O 完成后立即发送,并且文件句柄尚未关闭。
    • OnPostFileCreate:从文件系统返回文件创建 IO 后触发此事件。
    • OnPostFileRead:从文件系统返回文件读取 IO 后触发此事件。
    • OnPostFileWrite:从文件系统返回文件写入 IO 后触发此事件。
    • OnPostQueryFileSize:从文件系统返回查询文件大小 IO 后触发此事件。
    • OnPostQueryFileBasicInfo:从文件系统返回查询文件基本信息 IO 后触发此事件。
    • OnPostQueryFileStandardInfo:从文件系统返回查询文件标准信息 IO 后触发此事件。
    • OnPostQueryFileNetworkInfo:从文件系统返回查询文件网络信息 IO 后触发此事件。
    • OnPostQueryFileId:从文件系统返回查询文件 Id IO 后触发此事件。
    • OnPostQueryFileInfo:从文件系统返回查询文件信息 IO 后触发此事件。
    • OnPostSetFileSize:从文件系统返回设置的文件大小 IO 后触发此事件。
    • OnPostSetFileBasicInfo:从文件系统返回设置的文件基本信息 IO 后触发此事件。
    • OnPostSetFileStandardInfo:从文件系统返回设置的文件标准信息 IO 后触发此事件。
    • OnPostSetFileNetworkInfo:从文件系统返回设置的文件网络信息后触发此事件。
    • OnPostMoveOrRenameFile:从文件系统返回文件移动或重命名 IO 后触发此事件。
    • OnPostDeleteFile:从文件系统返回文件删除 IO 后触发此事件。
    • OnPostSetFileInfo:从文件系统返回设置文件信息 IO 后触发此事件。
    • OnPostQueryDirectoryFile:从文件系统返回查询目录文件信息后触发此事件。
    • OnPostQueryFileSecurity:从文件系统返回查询文件安全 IO 后触发此事件。
    • OnPostSetFileSecurity:从文件系统返回设置的文件安全 IO 后触发此事件。
    • OnPostFileHandleClose: 从文件系统返回文件句柄关闭 IO 后触发此事件。
    • OnPostFileClose: 从文件系统返回文件关闭 IO 后触发此事件。
文件审核信息

在文件监视器中,您可以注册文件更改事件,或注册特定的文件I/O事件。 通过文件通知事件您可以获得如下信息:

  • 用户名:访问该文件的用户。
  • 进程名称和进程 ID:访问文件并发起此 I/O 请求的进程。
  • ThreadId:访问文件并发起本次I/O请求的线程。
  • I/O事件名称:文件更改事件,您将知道文件是否被创建、写入、重命名、删除或文件信息被更改。 对于文件I/O事件,您将知道具体的I/O名称:文件打开、文件创建、文件读取、文件写入、查询或设置文件信息、查询或设置文件安全、文件关闭。
  • FileObject:与文件句柄概念类似,每打开一个文件,系统I/O管理器都会生成一个唯一的文件对象,直到文件句柄关闭为止。
  • 文件名:与此 I/O 请求关联的文件名。
  • 文件大小:访问的文件的文件大小。
  • 文件属性:被访问的文件的文件属性。
  • 最后写入时间:被访问文件的最后写入时间。
  • 文件创建选项:您将了解如何使用不同选项打开文件。
  • 文件I/O数据:读/写数据,或者查询/设置文件信息数据。
  • I/O状态:返回I/O状态,如果返回成功、警告或错误代码,则显示I/O结果。
文件监视器 C# 示例

以下示例创建一个过滤规则来监视运行时指定的目录。 该组件设置为监视目录中的所有文件更改。 如果文件被更改,文件名、文件更改类型、用户名、进程名称将打印到控制台。 该组件还设置为监视文件打开和文件读取IO,IO被触发时,文件打开和文件读取信息会打印到控制台。


using System;
using EaseFilter.FilterControl;

namespace FileMonitorConsole
   {
    class Program
    {
       static FilterControl filterControl = new FilterControl();
       
       static void Main(string[] args)
    {
       string lastError = string.Empty;
       string licenseKey = "Email us to request a trial key: info@easefilter.com";
       
       FilterAPI.FilterType filterType = FilterAPI.FilterType.MONITOR_FILTER;
       int serviceThreads = 5;
       int connectionTimeOut = 10; //seconds
       
    try
    {
        if (!filterControl.StartFilter(filterType, serviceThreads, connectionTimeOut, licenseKey, ref lastError))
        {
            Console.WriteLine("Start Filter Service failed with error:" + lastError);
            return;
        }
   
        //the watch path can use wildcard to be the file path filter mask.i.e. '*.txt' only monitor text file.
        string watchPath = "c:\\test\\*";
   
        if (args.Length > 0)
        {
            watchPath = args[0];
        }
   
        //create a file monitor filter rule, every filter rule must have the unique watch path.
        FileFilter fileMonitorFilter = new FileFilter(watchPath);
   
        //Filter the file change event to monitor all file change events.
        fileMonitorFilter.FileChangeEventFilter = FilterAPI.MonitorFileEvents.NotifyAll;
   
        //register the file change callback events.
        fileMonitorFilter.NotifyFileWasChanged += NotifyFileChanged;
   
        //Filter the monitor file IO events
        fileMonitorFilter.MonitorFileIOEventFilter = (ulong)(MonitorFileIOEvents.OnFileOpen | MonitorFileIOEvents.OnFileRead);
   
        fileMonitorFilter.OnFileOpen += OnFileOpen;
        fileMonitorFilter.OnFileRead += OnFileRead;
   
        filterControl.AddFilter(fileMonitorFilter);
   
        if (!filterControl.SendConfigSettingsToFilter(ref lastError))
        {
            Console.WriteLine("SendConfigSettingsToFilter failed." + lastError);
            return;
        }
   
        Console.WriteLine("Start filter service succeeded.");
   
        // Wait for the user to quit the program.
        Console.WriteLine("Press 'q' to quit the sample.");
        while (Console.Read() != 'q') ;
   
        filterControl.StopFilter();
   
    }
    catch (Exception ex)
    {
        Console.WriteLine("Start filter service failed with error:" + ex.Message);
    }
   
    }
   
    /// Fires this event when the file was changed.
    static void NotifyFileChanged(object sender, FileChangeEventArgs e)
    {
        Console.WriteLine("NotifyFileChanged:" + e.FileName + ",eventType:" + e.eventType.ToString()
        + ",userName:" + e.UserName + ",processName:" + e.ProcessName);
    }
   
    /// Fires this event after the file was opened, the handle is not closed.
    static void OnFileOpen(object sender, FileCreateEventArgs e)
    {
        Console.WriteLine("FileOpen:" + e.FileName + ",status:" + e.IOStatusToString()
        + ",userName:" + e.UserName + ",processName:" + e.ProcessName);
    }
   
    /// Fires this event after the read IO was returned.
    static void OnFileRead(object sender, FileReadEventArgs e)
    {
        Console.WriteLine("FileRead:" + e.FileName + ",offset:" + e.offset + ",readLength:"
        + e.returnReadLength + ",userName:" + e.UserName + ",processName:" + e.ProcessName);
    }
    }
   }
京公网安备 号    |    备案号:京ICP备09015132号-1024