【发布时间】:2011-05-08 21:23:04
【问题描述】:
我正在开发一个 miniFilter 驱动程序并采用了 Microsoft 的 SwapBuffers 以微型过滤器为例。 默认情况下,InstaceSetup 例程附加到所有卷。但我不想 附加到所有这些,只附加到一些选择的......
我尝试在“FLT_REGISTRATION”中设置“NULL”而不是“InstanceSetup” FilterRegistration”,然后在“DriverEntry”中调用“FltAttachVolume” 例行公事。我做了以下事情:
PFLT_VOLUME 音量; UNICODE_STRING 虚拟名称; …… RtlInitUnicodeString(&vname, L"E:\"); FltGetVolumeFromName(gFilterHandle, &vname, &vol); ... FltAttachVolume(gFilterHandle, vol, NULL, NULL); ...
当我尝试使用“NULL”3-d 参数调用 FltAttachVolume (PCUNICODE_STRING InstanceName) 我收到了一个 “STATUS_FLT_INSTANCE_NAME_COLLISION”错误。
如果我使用“NOT NULL”3-d 参数调用 FltAttachVolume,例如 “UniqueInstaceName”它返回给我“-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 中有一个 User 应用程序,以及例程 FilterAttach 用来。我试图在我的应用程序中以同样的方式调用这个例程 - 不 结果。
最后,我更改了 swapBuffers inf 文件:
- 没有 DefaultInstance 参数,我设置它:“SwapBuffers - Top 实例”。
-
我也从 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 - 中间实例" Instance1.Altitude = "370000" Instance1.Flags = 0x1;抑制自动附件 Instance2.Name = "SwapBuffers - 底部实例" Instance2.Altitude = "361000" Instance2.Flags = 0x1 ;抑制自动附件 Instance3.Name = "SwapBuffers - 顶级实例" Instance3.Altitude = "385100" Instance3.Flags = 0x1 ;禁止自动附件
将标志更改为 0x1 以禁止自动附加。 并且只通过这个 Inf 文件安装我的 SwapBuffers miniFilter,我收到了 “STATUS_SUCCESS” 来自我的驱动程序中的 FltAttachVolume 例程。但这并不是真的 正在附加到磁盘...
我做错了什么? 谢谢。
【问题讨论】:
标签: winapi driver volume minifilter