我正在开发一个miniFilter驱动程序,并以微软的SwapBuffers miniFilter为例。默认情况下,InstaceSetup路由将附加到所有卷。但我不想附在所有的人身上,只想依附于某些选择.
我尝试在"FLT_REGISTRATION FilterRegistration“中设置"NULL”而不是"FltAttachVolume“,然后在"DriverEntry”路由中调用“FltAttachVolume”。我做了以下工作:
PFLT_VOLUME vol.UNICODE_STRING vname;.RtlInitUnicodeString(&vname,L"E:\");FltGetVolumeFromName(gFilterHandle,&vname,&vol);FltAttachVolume(gFilterHandle,vol,NULL,NULL);
当我试图用"NULL“3d参数( "STATUS_FLT_INSTANCE_NAME_COLLISION" InstanceName)调用FltAttachVolume时,我收到了一个PCUNICODE_STRING错误。
如果我用"NOT NULL“3-d参数调用FltAttachVolume,例如"UniqueInstaceName”,它将返回me FltAttachVolume。
当我试图使用来自用户应用程序的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"
带有“NULL”:"-2145452013".
在MiniSpy miniFilter中有一个用户应用程序,并使用例程FilterAttach。在我的应用程序中,我试图以同样的方式调用这个例程--没有结果。
最后,我更改了swapBuffers inf文件:
Instance".
MiniFilter.AddRegistry HKR、“实例”、“DefaultInstance”、0x00000000、%DefaultInstance% HKR、“Instance1.Name%、Instance1.Name、%Instance1、%Instance1、Instance1.Name%、Instance2.00001、%Instance1.“实例\”%Instance3.Name%、“高度”、0x00000000、%Instance3.Flags% HKR、Instance3.Name%、“Flags”、0x00010001、%Instance3.标志%
.Instance1.Name = "SwapBuffers -中间实例“Instance1.Algic= "370000”Instance1.Flags = 0x1;抑制自动附件Instance2.Name = "SwapBuffers -底部实例“Instance2.Algic= "361000”Instance2.Flags = 0x1;抑制自动附件Instance3.Name = "SwapBuffers -顶级实例“Instance3.Algic= "385100”Instance3.Flags = 0x1;抑制自动附件=0x1。
将标志更改为0x1以禁止自动附件。只有通过这个Inf文件安装我的SwapBuffers miniFilter,我才在驱动程序中收到来自FltAttachVolume例程的FltAttachVolume。但它并不是真的附着在磁盘上.
我做错什么了?谢谢。
发布于 2017-05-17 23:46:54
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
}
}我通常会附加到所有的卷,但我想尝试附加到一个卷,它的工作很好。
https://stackoverflow.com/questions/5930472
复制相似问题