File Protector, File Control Filter Driver SDK

下载 EaseFilter Data Protection Filter Driver SDK 安装文件
下载 EaseFilter Data Protection Filter Driver SDK 压缩文件
使用Control Filter Driver SDK 开发文件访问控制或文件保护器应用程序

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

文件访问控制和文件保护

EaseFilter 文件保护器可以防止未经授权的用户访问您的敏感文件。 使用EaseFilter文件保护器,您可以控制文件系统级别的文件I/O活动,捕获文件打开、创建、覆盖、读取、写入、查询文件信息、设置文件信息、查询安全信息、设置安全信息、文件重命名、 文件删除、目录浏览和文件关闭 I/O 请求。

EaseFilter 文件保护器为透明文件级加密提供全面的安全解决方案。 它允许文件透明地即时加密或解密,每个文件都将使用唯一的加密iv密钥进行加密,它可以允许只有授权的用户或进程才能访问加密的文件。

设置具有不同文件过滤规则的文件保护策略

为了监控或保护您的文件夹,您需要设置多个文件过滤规则。 在文件过滤规则中,您必须设置文件过滤掩码,它是过滤规则的唯一索引,您可以设置哪些进程或用户可以监视文件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 完成后立即发送,并且文件句柄尚未关闭。
文件过滤规则的文件访问控制标志设置

为了控制文件访问并保护您的敏感数据,您可以在过滤规则中配置访问控制标志,也可以注册 pre-io 事件,在 pre-io 通知事件中允许或拒绝文件访问。 配置过滤规则的访问标志,可以防止您的文件被未经授权的进程或用户读取、写入、删除、重命名或更改。

在文件过滤规则中设置访问标志来控制文件访问

通过过滤规则的访问标志,您可以使用访问标志整数的每一位来允许或阻止特定 I/O 运行,如下所示。

  • ALLOW_ENCRYPT_NEW_FILE:如果启用加密过滤规则以启用密码保护文件,则允许加密新创建的文件。
  • ALLOW_READ_ENCRYPTED_FILES:允许读取加密文件,否则将返回原始加密数据。
  • DISABLE_ENCRYPT_DATA_ON_READ:在启用加密过滤规则时加密文件,如果为 false,则会在读取时加密未加密的数据。
  • ENABLE_HIDE_FILES_IN_DIRECTORY_BROWSING:如果添加了隐藏文件掩码,则隐藏文件夹目录列表中的文件。
  • ENABLE_REPARSE_FILE_OPEN:如果添加了重新解析文件掩码,则将打开的文件重新解析为新文件名。
  • ALLOW_FILE_ACCESS_FROM_NETWORK:允许通过 smb 共享访问文件。
  • ALLOW_COPY_PROTECTED_FILES_OUT:允许将文件复制出受保护的文件夹。
  • ALLOW_COPY_PROTECTED_FILES_TO_USB:允许从 USB 驱动器复制文件。
  • ALLOW_OPEN_WTIH_ACCESS_SYSTEM_SECURITY:允许打开文件以访问文件的安全信息。
  • ALLOW_OPEN_WITH_READ_ACCESS:允许打开文件以进行读取访问。
  • ALLOW_OPEN_WITH_WRITE_ACCESS:允许打开文件进行写访问。
  • ALLOW_OPEN_WITH_CREATE_OR_OVERWRITE_ACCESS:允许您创建新文件或使用覆盖访问权限打开文件。
  • ALLOW_OPEN_WITH_DELETE_ACCESS:允许打开文件进行删除。
  • ALLOW_READ_ACCESS:允许读取文件数据。
  • ALLOW_WRITE_ACCESS:允许写入文件。
  • ALLOW_QUERY_INFORMATION_ACCESS:允许查询文件信息。
  • ALLOW_SET_INFORMATION:允许更改文件信息:更改文件属性、更改文件大小、重命名文件名、删除文件。
  • ALLOW_FILE_RENAME:允许重命名文件。
  • ALLOW_FILE_DELETE:允许删除文件。
  • ALLOW_FILE_SIZE_CHANGE:允许更改文件大小。
  • ALLOW_QUERY_SECURITY_ACCESS:允许查询文件安全信息。
  • ALLOW_SET_SECURITY_ACCESS:允许更改文件安全信息。
  • ALLOW_DIRECTORY_LIST_ACCESS:允许您浏览目录文件。
在文件过滤规则中设置特定进程或用户的访问权限

通过访问权限设置,您可以在文件过滤规则中添加或删除特定进程或用户的访问权限。因此,您可以授权用户或进程访问受保护的文件,也可以防止未经授权的用户或进程访问受保护的文件。

在文件过滤规则中注册文件 I/O 事件以控制文件访问

通过注册特定的 I/O 事件,您可以完全控制 I/O,每次注册 I/O 都会调用您的回调函数,您可以根据 I/O 信息允许、修改或阻止该 I/O。

  • OnPreFileCreate:在文件创建 IO 进入文件系统之前触发此事件。
  • OnPostFileCreate:从文件系统返回文件创建 IO 后触发此事件。
  • OnPreFileRead:在文件读取 IO 进入文件系统之前触发此事件。
  • OnPostFileRead:从文件系统返回文件读取 IO 后触发此事件。
  • OnPreFileWrite:在文件写入 IO 写入文件系统之前触发此事件。
  • OnPostFileWrite:从文件系统返回文件写入 IO 后触发此事件。
  • OnPreQueryFileSize:在查询文件大小 IO 深入到文件系统之前触发此事件。
  • OnPostQueryFileSize:从文件系统返回查询文件大小 IO 后触发此事件。
  • OnPreQueryFileBasicInfo:在查询文件基本信息 IO 深入到文件系统之前触发此事件。
  • OnPostQueryFileBasicInfo:从文件系统返回查询文件基本信息 IO 后触发此事件。
  • OnPreQueryFileStandardInfo:在查询文件标准信息 IO 进入文件系统之前触发此事件。
  • OnPostQueryFileStandardInfo:从文件系统返回查询文件标准信息 IO 后触发此事件。
  • OnPreQueryFileNetworkInfo:在查询文件网络信息 IO 深入到文件系统之前触发此事件。
  • OnPostQueryFileNetworkInfo:从文件系统返回查询文件网络信息 IO 后触发此事件。
  • OnPreQueryFileId:在查询文件 Id IO 进入文件系统之前触发此事件。
  • OnPostQueryFileId:从文件系统返回查询文件 Id IO 后触发此事件。
  • OnPreQueryFileInfo:在查询文件信息 IO 深入到文件系统之前触发此事件
  • OnPostQueryFileInfo:从文件系统返回查询文件信息 IO 后触发此事件。
  • OnPreSetFileSize:在设置的文件大小 IO 进入文件系统之前触发此事件。
  • OnPostSetFileSize:从文件系统返回设置的文件大小 IO 后触发此事件。
  • OnPreSetFileBasicInfo:在设置文件基本信息 IO 进入文件系统之前触发此事件。
  • OnPostSetFileBasicInfo:从文件系统返回设置的文件基本信息 IO 后触发此事件。
  • OnPreSetFileStandardInfo:在设置文件标准信息 IO 进入文件系统之前触发此事件。
  • OnPostSetFileStandardInfo:从文件系统返回设置的文件标准信息 IO 后触发此事件。
  • OnPreSetFileNetworkInfo:在设置的文件网络信息写入文件系统之前触发此事件。
  • OnPostSetFileNetworkInfo:从文件系统返回设置的文件网络信息后触发此事件。
  • OnPreMoveOrRenameFile:在文件移动或重命名 IO 进入文件系统之前触发此事件。
  • OnPostMoveOrRenameFile:从文件系统返回文件移动或重命名 IO 后触发此事件。
  • OnPreDeleteFile:在文件删除 IO 进入文件系统之前触发此事件。
  • OnPostDeleteFile:从文件系统返回文件删除 IO 后触发此事件。
  • OnPreSetFileInfo:在设置文件信息 IO 进入文件系统之前触发此事件。
  • OnPostSetFileInfo:从文件系统返回设置的文件信息 IO 后触发此事件。
  • OnPreQueryDirectoryFile:在查询目录文件信息写入文件系统之前触发此事件。
  • OnPostQueryDirectoryFile:从文件系统返回查询目录文件信息后触发此事件。
  • OnPreQueryFileSecurity:在查询文件安全 IO 深入到文件系统之前触发此事件。
  • OnPostQueryFileSecurity:从文件系统返回查询文件安全 IO 后触发此事件。
  • OnPreSetFileSecurity:在设置文件安全 IO 进入文件系统之前触发此事件。
  • OnPostSetFileSecurity:从文件系统返回设置的文件安全 IO 后触发此事件。
  • OnPreFileHandleClose:在文件句柄关闭 IO 进入文件系统之前触发此事件。
  • OnPostFileHandleClose:从文件系统返回文件句柄关闭 IO 后触发此事件。
  • OnPreFileClose:在文件关闭 IO 进入文件系统之前触发此事件。
  • OnPostFileClose:从文件系统返回文件关闭 IO 后触发此事件。
文件保护器控制台

在文件保护器控制台中,您可以看到拒绝的I/O信息或回调控制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 FileProtectorConsole
{
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|FilterAPI.FilterType.CONTROL_FILTER
|FilterAPI.FilterType.PROCESS_FILTER|FilterAPI.FilterType.REGISTRY_FILTER|FilterAPI.FilterType.ENCRYPTION_FILTER;

int serviceThreads = 5;
int connectionTimeOut = 10; //seconds

try
{
//copy the right Dlls to the current folder.
Utils.CopyOSPlatformDependentFiles(ref lastError);

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 protector filter rule, every filter rule must have the unique watch path.
FileFilter fileProtectorFilter = new FileFilter(watchPath);

//configure the access right for the protected folder

//prevent the file from being deleted.
fileProtectorFilter.EnableDeleteFile = false;

//prevent the file from being renamed.
fileProtectorFilter.EnableRenameOrMoveFile = false;

//prevent the file from being written.
fileProtectorFilter.EnableWriteToFile = false;

//authorize process with full access right
fileProtectorFilter.ProcessNameAccessRightList.Add("notepad.exe", FilterAPI.ALLOW_MAX_RIGHT_ACCESS);

//you can enable/disalbe more access right by setting the properties of the fileProtectorFilter.

//Filter the callback file IO events, here get callback before the file was opened/created, and file was deleted.
fileProtectorFilter.ControlFileIOEventFilter = (ulong)(ControlFileIOEvents.OnPreFileCreate | ControlFileIOEvents.OnPreDeleteFile);

fileProtectorFilter.OnPreCreateFile += OnPreCreateFile;
fileProtectorFilter.OnPreDeleteFile += OnPreDeleteFile;

filterControl.AddFilter(fileProtectorFilter);

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 before the file was opened.
///

static void OnPreCreateFile(object sender, FileCreateEventArgs e)
{
Console.WriteLine("OnPreCreateFile:" + e.FileName + ",userName:" + e.UserName + ",processName:" + e.ProcessName);

//you can block the file open here by returning below status.
e.ReturnStatus = NtStatus.Status.AccessDenied;

}

///

/// Fires this event before the file was deleted.
///

static void OnPreDeleteFile(object sender, FileIOEventArgs e)
{
Console.WriteLine("OnPreDeleteFile:" + e.FileName + ",userName:" + e.UserName + ",processName:" + e.ProcessName);

//you can block the file being deleted here by returning below status.
e.ReturnStatus = NtStatus.Status.AccessDenied;
}
}
}
关于EaseFilter

EaseFilter是一家专门从事Windows文件系统过滤驱动开发的公司。 它可以为各种功能提供架构师、实施和测试文件系统过滤器驱动程序。 它还可以提供多个级别的帮助来满足您的特定需求: 为您现有的文件系统过滤驱动程序提供咨询服务; 定制SDK以满足您的需求; 使用 SDK 源代码创建您自己的过滤器驱动程序。

欲了解更多信息,请访问网站

您可以在此处下载演示二进制文件和示例项目 zip 文件

京公网安备 号    |    备案号:京ICP备09015132号-1024