【问题标题】:MiniFilter driver. Filter attaching problemsMiniFilter 驱动程序。过滤器连接问题
【发布时间】: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


    【解决方案1】:
    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
        }
    }
    

    我通常附加到所有卷,但我想尝试附加到单个卷,它工作正常。

    【讨论】:

    • 我试过这个但是得到“系统找不到指定的文件”并立即蓝屏...
    • 对不起消息是“因为它还没有完成初始化(FltStartFiltering还没有被调用)”并立即蓝屏...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2018-08-30
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多