问题标签 [minifilter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3398 浏览

winapi - Windows 文件系统 Minifilter 驱动程序:我可以使用它们监视和阻止 FS 操作吗?

我需要:
1. 监视某些驱动器/路径上的操作
2. 防止某些驱动器/路径上的读取和/或写入操作
例如:

这可以使用Windows Filesystem Minifilter Drivers吗?

我对第 2 步最感兴趣。换句话说,微过滤器可以取消 IRP 吗?

0 投票
1 回答
861 浏览

windows - windows I/O manager - IRP在read-like和write-like中的分类

我正在编写一个Windows 文件系统微过滤器驱动程序,该驱动程序必须根据其类型(读/写)在操作前回调中使I/O 请求数据包(IRP)失败。 我如何从回调参数(或其他地方?)中找出操作是类似读取(仅读取数据)还是类似写入(修改磁盘上的数据 - 写入、删除、格式化等)?

是主要 IRP 代码的列表。

我正在考虑类似的事情:

但我不确定,我认为这些仅在术后回调中可用。文档真的很麻烦。

进一步说明的代码示例:

0 投票
2 回答
1344 浏览

windows - 来自微过滤器驱动程序的 USB 存储设备序列号(来自 USB 设备描述符)

我想使用此处描述的技术从微过滤器文件系统驱动程序内部提取 USB 存储设备序列号,在 InstanceSetup 回调中,唯一的区别是我在内核模式下执行此操作。
我用:

枚举可能的接口(示例结果):

我想通过 IOCTL_STORAGE_GET_DEVICE_NUMBER 找到其中哪一个是我的卷的接口。

我尝试了 ZwCreateFile 和 ZwDeviceIoControlFile 但 ZwCreateFile 返回一个 STATUS_OBJECT_NAME_INVALID。

如何将 IOCTLS 发送到这些接口?在用户模式下一切正常,但在内核模式下却失败了!

0 投票
2 回答
1245 浏览

c# - c#应用程序和minifilter驱动程序之间的通信

是否有任何通过通信端口与微过滤器通信的 c# 应用程序示例?

谢谢

0 投票
1 回答
2073 浏览

winapi - 微型过滤器驱动程序。过滤器连接问题

我正在开发一个 miniFilter 驱动程序,并以 Microsoft 的 SwapBuffers miniFilter 为例。默认情况下,InstaceSetup 例程附加到所有卷。但我不想依附于所有这些,只依附于一些选择...

我尝试在“FLT_REGISTRATION FilterRegistration”中设置“NULL”而不是“InstanceSetup”,然后在“DriverEntry”例程中调用“FltAttachVolume”。我做了以下事情:

PFLT_VOLUME 卷;UNICODE_STRING 虚拟名称;.... RtlInitUnicodeString(&vname, L"E:\"); FltGetVolumeFromName(gFilterHandle, &vname, &vol); ... FltAttachVolume(gFilterHandle, vol, NULL, NULL); ...

当我尝试使用“NULL”3-d 参数(PCUNICODE_STRING InstanceName)调用 FltAttachVolume 时,我收到了 “STATUS_FLT_INSTANCE_NAME_COLLISION”错误。

如果我使用“NOT NULL”3-d 参数(例如“UniqueInstaceName”)调用 FltAttachVolume,它会返回“-2145452013” ​​。

当我尝试使用我的用户应用程序中的 FilterAttach 例程附加卷时,我收到相同的错误,如下所示:

... driver.driverName = L“swapBuffers”;... LPCWSTR vname = L"F:\"; ... FilterAttach(driver.driverName, vname, NULL, NULL, NULL);

使用“NULL”3-d 参数 (LPCWSTR lpInstanceName): “ERROR_FLT_INSTANCE_NAME_COLLISION”

使用 "NOT-NULL": "-2145452013"

在 MiniSpy miniFilter 中有一个用户应用程序,并且使用了例程 FilterAttach。我尝试在我的应用程序中以相同的方式调用此例程 - 没有结果。

最后,我更改了 swapBuffers inf 文件:

  • 没有 DefaultInstance 参数,我将其设置为:“SwapBuffers - Top Instance”。
  • 我也从 MiniSpy inf 文件中复制了这个:

    [MiniFilter.AddRegistry] HKR,"Instances","DefaultInstance",0x00000000,%DefaultInstance% HKR,"Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude% HKR,"Instances\"% Instance1.Name%,"Flags",0x00010001,%Instance1.Flags% HKR,"Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude% HKR,"Instances\"%Instance2.Name% ,"Flags",0x00010001,%Instance2.Flags% HKR,"Instances\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude% HKR,"Instances\"%Instance3.Name%,"Flags" ,0x00010001,%Instance3.Flags%

    ............. Instance1.Name = "SwapBuffers - Middle Instance" Instance1.Altitude = "370000" Instance1.Flags = 0x1 ; 抑制自动附件 Instance2.Name = "SwapBuffers - Bottom Instance" Instance2.Altitude = "361000" Instance2.Flags = 0x1 ; 抑制自动附件 Instance3.Name = "SwapBuffers - Top Instance" Instance3.Altitude = "385100" Instance3.Flags = 0x1 ; 抑制自动附件

将标志更改为 0x1 以抑制自动附件。并且仅通过此 Inf 文件安装我的 SwapBuffers miniFilter,我从驱动程序中的 FltAttachVolume 例程收到 “STATUS_SUCCESS”。但它并没有真正附加到磁盘...

我究竟做错了什么?谢谢。

0 投票
2 回答
1897 浏览

file - 调试微过滤器

一段时间以来,我一直在使用 IFS 工具包在 Windows 7 上编写和调试微过滤器。它终于可以工作了,但是由于我需要添加更多功能,所以我会花更多的时间来玩它

我担心的是调试。到目前为止,我只是简单地构建了驱动程序,将其安装在虚拟机上并通过验证 dbg_print 语句对其进行了测试。我一直在使用这种简单且容易出错的方法,因为我找不到任何关于如何更结构化和以编程方式调试微过滤器的信息。

是否有调试微过滤器或过滤器的最佳实践方法?可以使用 VisualDDK 将(远程)调试功能添加到 Visual Studio 的微过滤器吗?

问候,好奇

0 投票
2 回答
604 浏览

winapi - 文件系统驱动程序可以根据用户 ID 过滤过滤操作吗?

跟进:Windows 文件系统微过滤器驱动程序:我可以使用它们监视和阻止 FS 操作吗?

我正在寻找一种方法来过滤对某些文件系统资源的访问。这包括可移动媒体和非 ntfs 文件系统 - 因此标准 ACL 将不起作用。

根据我的阅读,文件系统驱动程序过滤器可能会有所帮助 - 但我没有找到获取启动用户的用户 ID 的方法。这可能吗?

也欢迎其他建议\参考现有工具。

0 投票
1 回答
3949 浏览

c++ - 我想创建一个微过滤器驱动程序来透明地重定向磁盘 i/o,但我在开始时遇到了麻烦

我目前正在进行的一个项目需要实现一个 w/m 复制机制,该机制将用于在 Windows XP 上以与 Deep Freeze 或 Sandboxie 类似的方式重定向磁盘 i/o。如果可以的话,我还希望能够“挂载”用户修改过的文件,类似于 VirtualCloneDrive 如何模拟磁盘驱动器并在其上透明地挂载 ISO 映像。

据我了解,此类程序使用微过滤器驱动程序来重定向 i/o 请求。标准流程将任何修改后的数据复制到辅助位置,然后读取/修改该存储以供后续访问该数据;所以我想我明白我需要在那里做什么。但是,在模拟 CD/DVD 驱动器并在其上安装映像时,我完全迷失了方向。

我一直在网上(谷歌、MSDN、代码项目等)和诸如使用 Windows 驱动程序基础Windows NT 文件系统内部开发驱动程序:开发人员指南等书籍中寻找特定信息和示例(关于监视、拦截和重定向请求和创建环回设备)被证明是困难的。我对所涉及的技术还很陌生,所以我可能无法只见树木不见森林。

我想知道是否有人遇到过类似的情况并发现了任何有用的资源,或者可以为我指出正确的方向,以便我可以实现类似的功能。

编辑:我发现这个问题似乎是一个有用的资源(尽管不适用于我的特定用例),所以我将其链接到此处以添加到任何即将到来的回复中。

一些澄清:

我正在尝试创建一个程序,该程序允许用户安装和使用应用程序而无需管理权限。该程序将通过将任何文件系统/注册表修改保存到单独的存储区域(例如,笔式驱动器或网络存储上的文件)然后允许将这些修改集成到运行主机程序的任何桌面中来运行. 用 USB 笔随身携带您的桌面,将其插入,然后应用您的设置。

要重定向 I/O,我可以:

  1. 修补进程的导入地址表 (IAT) 以在应用程序级别插入自定义代码。
  2. 编写用户模式过滤器驱动程序以动态修改请求。
  3. 为了增强(实际上是)安全性,实现内核模式驱动程序以与 AV 软件类似的方式修补系统服务描述符表 (SSDT)。

这些方法中的每一种都有优点和缺点。例如,方法三比方法一困难得多。它提供了更高的安全性,但即便如此,它也可以被击败(理论攻击自 96 年以来一直存在,实际攻击自 07 年以来一直存在。)

我最初是在考虑特定的安全功能(而不是类似于WoW64 兼容性设置的 i/o 重定向);但是自从开始研究这个问题以来,我记得你不能永远保护用户免受自己的伤害,而且无论我为保护主机系统免受恶意进程或愚蠢用户的攻击付出了多少努力,它都可能被击败(或更有可能我会犯错误。)我还决定避免重新发明沙盒和防病毒轮子,而只专注于创建一些有用的功能。“一个工具应该做好一项工作,把它做好”的理念赢得了胜利。

简而言之,我要做的就是实现类似于 VM 快照的功能,并将更改重定向到我自己的存储区域。下图有点过时了,但它可能比我现在更能传达我的意图:-)

早期应用设计

0 投票
6 回答
3982 浏览

winapi - 用于文件系统操作监控\过滤的微过滤器与 API Hooking

我需要开发一个应用程序来监视并可能过滤(拒绝调用)文件操作。

似乎开发微过滤器是“标准”解决方案。另一种可能的方法是使用 API 挂钩。

这些是相关的解决方案吗?(我在某些地方读到 API 挂钩可能不适合 - 但没有给出解释)

还有其他选择吗?

0 投票
1 回答
517 浏览

filesystems - 是否可以在文件系统过滤器驱动程序中删除 IRP?

我有几个签名,我想构建一个文件系统过滤器驱动程序,它可以使用签名检查所有可能的操作。如果找到匹配项,则过滤器驱动程序应完全丢弃 IRP 数据包。

有可能这样做吗?