Winapi 微型过滤器驱动程序。过滤器连接问题
我正在开发一个微型过滤器驱动程序,并使用了微软的SwapBuffers 以微型过滤器为例。 默认情况下,InstanceSetup路由正在连接到所有卷。但是我不想要 要依附于所有这些,只依附于某些选择 我试图在“FLT_注册”中设置“NULL”而不是“InstanceSet” “FilterRegistration”,然后在“DriverEntry”中调用“fltathVolume” 罗廷。我已经做了以下工作: PFLT_卷; UNICODE_字符串vname; .... RTL代码字符串(&vname,L“E:\”); FltGetVolumeFromName(gFilterHandle,&vname,&vol); ... FltAttachVolume(gFilterHandle,vol,NULL,NULL); 当我试图用“NULL”3-d参数调用fltathVolume时 (PCUNICODE_字符串InstanceName)我收到一个 “状态\u FLT\u实例\u名称\u冲突”错误 如果我用一个“NOTNULL”3-d参数调用FltAttachVolume,例如 “UniqueInstanceName”返回我“-2145452013” 当我尝试使用 我的用户应用程序中的FilterAttach例程,如下所示: 。。。 driver.driverName=L“swapBuffers”; ... LPCWSTR vname=L“F:\”; ... filteratach(driver.driverName,vname,NULL,NULL,NULL) 具有“NULL”三维参数(LPCWSTR lpInstanceName): “错误\u FLT\u实例\u名称\u冲突” 带有“NOT-NULL”:“-2145452013” 在MiniSpy miniFilter中有一个用户应用程序,例程FilterAttach 使用。我试图在我的应用程序中以同样的方式调用此例程-否 结果 最后,我更改了swapBuffers inf文件:Winapi 微型过滤器驱动程序。过滤器连接问题,winapi,driver,volume,minifilter,Winapi,Driver,Volume,Minifilter,我正在开发一个微型过滤器驱动程序,并使用了微软的SwapBuffers 以微型过滤器为例。 默认情况下,InstanceSetup路由正在连接到所有卷。但是我不想要 要依附于所有这些,只依附于某些选择 我试图在“FLT_注册”中设置“NULL”而不是“InstanceSet” “FilterRegistration”,然后在“DriverEntry”中调用“fltathVolume” 罗廷。我已经做了以下工作: PFLT_卷; UNICODE_字符串vname; .... RTL代码字符串(&v
- 没有DefaultInstance参数,我将其设置为:“SwapBuffers-Top” 实例”
- 我还从MiniSpy inf文件复制了此文件: [迷你过滤器.AddRegistry] HKR,“实例”,“默认实例”,0x00000000,%DefaultInstance% HKR,“实例\%Instance1.Name%”,“高度”,0x00000000,%Instance1.Altitude% HKR,“实例\%Instance1.Name%”,“标志”,0x00010011,%Instance1.Flags% HKR,“实例\%Instance2.Name%”,“高度”,0x00000000,%Instance2.Altitude% HKR,“实例\%Instance2.Name%”,“标志”,0x00010011,%Instance2.Flags% HKR,“实例\%Instance3.Name%”,“高度”,0x00000000,%Instance3.Altitude% HKR,“实例\%Instance3.Name%”,“标志”,0x00010011,%Instance3.Flags% 。。。。。。。。。。。。。 Instance1.Name=“SwapBuffers-中间实例” 实例1.海拔高度=“370000” Instance1.Flags=0x1;抑制自动附件 Instance2.Name=“SwapBuffers-底部实例” 实例2.海拔高度=“361000” Instance2.Flags=0x1;抑制自动附件 Instance3.Name=“SwapBuffers-顶级实例” 实例3.海拔高度=“385100” Instance3.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
}
}
我通常会连接到所有卷,但我想尝试连接到单个卷,效果很好
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
}
}
那很好。
我有一些类似的代码,这很好
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
}
}
我通常会附加到所有卷,但我想尝试附加到单个卷,效果很好。我尝试了此操作,但出现“系统无法找到指定的文件”并立即出现蓝屏…很抱歉,消息是“因为尚未完成初始化(未调用FltStartFiltering)”并且立即出现蓝屏…我尝试了这个,但得到了“系统无法找到指定的文件”和立即出现的蓝屏…很抱歉,消息是“因为它尚未完成初始化(尚未调用FltStartFiltering)”,并且立即出现蓝屏。。。
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
}
}