首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniFilter司机。滤波器附加问题

MiniFilter司机。滤波器附加问题
EN

Stack Overflow用户
提问于 2011-05-08 21:23:04
回答 1查看 2.2K关注 0票数 2

我正在开发一个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".

  • also
  • 没有DefaultInstance参数,我将其设置为:"SwapBuffers - Top
  • ,我从MiniSpy inf-文件中复制了它:

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。但它并不是真的附着在磁盘上.

我做错什么了?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 23:46:54

代码语言:javascript
复制
Instance1.Flags = 0x1 

这很好。我有一些类似的代码,这很好。

代码语言:javascript
复制
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
    }
}

我通常会附加到所有的卷,但我想尝试附加到一个卷,它的工作很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5930472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档