我正在开发一个miniFilter驱动程序,并采用了微软的SwapBuffers 以miniFilter为例。 默认情况下,InstaceSetup例程将附加到所有卷。但我不想要 附加到所有这些,只有一些选择......
我尝试在“FLT_REGISTRATION”中设置“NULL”而不是“InstanceSetup” FilterRegistration“然后在”DriverEntry“中调用”FltAttachVolume“ routin。我做了以下事情:
PFLT_VOLUME vol; UNICODE_STRING vname; .... 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,例如a “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文件:
我也从MiniSpy inf-file中复制了这个:
[MiniFilter.AddRegistry] HKR, “实例”, “DefaultInstance”,00000000,%DefaultInstance% HKR, “实例\” %Instance1.Name%, “海拔高度”,00000000,%Instance1.Altitude% HKR, “实例\” %Instance1.Name%, “旗”,0x00010001,%Instance1.Flags% HKR, “实例\” %Instance2.Name%, “海拔高度”,00000000,%Instance2.Altitude% HKR, “实例\” %Instance2.Name%, “旗”,0x00010001,%Instance2.Flags% HKR, “实例\” %Instance3.Name%, “海拔高度”,00000000,%Instance3.Altitude% HKR, “实例\” %Instance3.Name%, “标记”,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 我的驱动程序中的FltAttachVolume例程中的“STATUS_SUCCESS”。但事实并非如此 附在磁盘上......
我做错了什么? 感谢。
答案 0 :(得分:0)
Instance1.Flags = 0x1
没关系。 我有一些类似的代码,工作正常。
status = FltRegisterFilter( DriverObject,
&FilterRegistration,
&gFilterHandle );
FLT_ASSERT( NT_SUCCESS( status ) );
if (NT_SUCCESS( status )) {
PSECURITY_DESCRIPTOR sd;
OBJECT_ATTRIBUTES oa;
UNICODE_STRING uniString;
status = FltBuildDefaultSecurityDescriptor(&sd,
FLT_PORT_ALL_ACCESS);
if (!NT_SUCCESS(status)) {
return status;
}
RtlInitUnicodeString(&uniString, PORT_NAME);
InitializeObjectAttributes(&oa,
&uniString,
OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,
NULL,
sd);
status = FltCreateCommunicationPort(gFilterHandle,
&gServerPort,
&oa,
NULL,
Connect,
Disconnect,
Message,
1);
FltFreeSecurityDescriptor(sd);
BREAK_HERE(); // DbgBreak() macro
//
// Start filtering i/o
//
status = FltStartFiltering(gFilterHandle);
if (!NT_SUCCESS(status)) {
FltUnregisterFilter(gFilterHandle);
}
else {
RtlInitUnicodeString(&uniString, L"\\Device\\HarddiskVolume1");
PFLT_VOLUME vol;
FltGetVolumeFromName(gFilterHandle, &uniString, &vol);
status = FltAttachVolume(gFilterHandle, vol, NULL, NULL);
// status == 0x0 at that point and the mini filter is attached to the Volume
}
}
我通常会附加到所有卷,但我想尝试附加到单个卷,它可以正常工作。