配置监视筛选器驱动程序的 INF 文件

以下 NDIS 筛选器驱动程序安装问题与监视筛选器驱动程序相关联:

  • 在 INF 文件中将 INF 文件条目设置为 NetService 。 以下示例演示 INF 文件的示例 条目。

    Class = NetService
    
  • 筛选器驱动程序 INF 文件中的 DDInstall 节必须具有 “特征” 条目。 以下示例演示如何在筛选器 INF 文件中定义 “特征” 条目。

    Characteristics=0x40000
    

    0x40000值指示已设置NCF_LW_FILTER (0x40000) 。 筛选器驱动程序不得设置NCF_FILTER (0x400) 标志。 NCF_ Xxx 标志的值在 Netcfgx.h 中定义。 有关NCF_ Xxx 标志的详细信息,请参阅 网络 INF 文件中的 DDInstall 部分

  • 在 INF 文件中设置 NetCfgInstanceId INF 文件条目,如以下示例所示。

    NetCfgInstanceId="{5cbf81bf-5055-47cd-9055-a76b2b4e3697}"
    

    可以使用 Uuidgen.exe 工具为 NetCfgInstanceId 条目创建 GUID。

  • 筛选器驱动程序的 INF 文件的 DDInstall 部分必须包含用于 Ndi 键的 Addreg 指令。 INF 文件必须在 Ndi 键下指定 Service 条目。 INF 文件的 service-install 节中的 ServiceBinary 条目指定筛选器驱动程序的二进制文件的路径。 有关详细信息,请参阅将Service-Related值添加到网络 INF 文件中的 Ndi 键和 DDInstall.Services 部分

  • 筛选器驱动程序 INF 文件中的 DDInstall 节必须具有 FilterTypeFilterRunType 条目。 若要指定监视筛选器,请在 INF 文件中定义 FilterType 条目,如以下示例所示。

    HKR, Ndi,FilterType,0x00010001 ,0x00000001
    

    FilterType 值0x00000001指示筛选器是监视筛选器。

  • 在 INF 文件中定义 FilterRunType 条目,如以下示例所示。

    HKR, Ndi,FilterRunType,0x00010001 ,0x00000002
    

    上述示例中的0x00000002值指示筛选器模块是可选的。 若要安装必需的筛选器模块,请将 FilterRunType 条目设置为 0x00000001。 有关详细信息,请参阅 强制筛选器驱动程序

    注意 我们强烈建议不要强制使用监视轻量级筛选器 (LWF) 驱动程序,除非要在没有可选修改 LWF 驱动程序的受控环境中使用。 这是因为强制监视 LWF 驱动程序可能会导致可选修改 LWF 驱动程序使 FilterAttach 失败。 根据设计,监视 LWF 驱动程序绑定到每个修改筛选器和绑定,以便于在所有级别监视网络流量。 假设出现了下面这种情景:

    • 强制监视 LWF 驱动程序的实例是通过可选的修改 LWF 驱动程序安装的。
    • 下级修改可选 LWF 驱动程序无法附加到较低的组件。 这将导致不调用强制监视 LWF 驱动程序的 FilterAttach 处理程序。
    • 由于现在未加载强制 LWF 驱动程序的实例,因此 NDIS 不会将任何协议 ((如 TCP/IP) )绑定到接口或 NIC,从而使接口不可用。
  • 以下示例演示筛选器驱动程序 INF 文件如何指定服务的名称。

    HKR, Ndi,Service,,"NdisMon"
    

    在此示例中,“NdisMon”是报告给 NDIS 的驱动程序服务的名称。 请注意,筛选器驱动程序服务的名称可以不同于驱动程序的二进制文件的名称,但它们通常相同。

  • 以下示例演示筛选器 INF 文件在添加该服务时如何引用筛选器驱动程序服务的名称。

    [Install.Services]
    AddService=NdisMon,,NdisMon_Service_Inst
    
    [NdisMon_Service_Inst]
    DisplayName     = %NdisMon_Desc%
    ServiceType     = 1 ;SERVICE_KERNEL_DRIVER
    StartType       = 1 ;SERVICE_SYSTEM_START
    ErrorControl    = 1 ;SERVICE_ERROR_NORMAL
    ServiceBinary   = %13%\ndisMon.sys
    LoadOrderGroup  = NDIS
    Description     = %NdisMon_Desc%
    AddReg          = Common.Params.Reg
    
  • 筛选器 INF 文件必须至少指定 CoServices 属性筛选器的主服务名称,如以下示例所示。

    HKR, Ndi,CoServices,0x00010000,"NdisMon"
    

    有关 CoServices 属性的详细信息,请参阅 向 Ndi 键添加Service-Related值

  • 筛选器驱动程序的 INF 文件中的 FilterClass 值确定它在修改筛选器堆栈中的顺序。 但是,监视筛选器驱动程序不定义 FilterClass 键。 相反,首先安装的监视筛选器模块离微型端口适配器最近。

  • 必须在监视筛选器驱动程序 INF 文件中定义以下条目才能控制驱动程序绑定:

    HKR, Ndi\Interfaces,UpperRange,,"noupper"
    HKR, Ndi\Interfaces,LowerRange,,"nolower"
    HKR, Ndi\Interfaces, FilterMediaTypes,,"ethernet"
    

    有关控制驱动程序绑定的详细信息,请参阅 指定筛选器驱动程序绑定关系

  • 监视筛选器 INF 文件可以指定筛选器驱动程序的通用参数定义、与特定适配器关联的参数以及与特定实例关联的参数 (筛选器模块) 。 以下示例演示了一些常见的参数定义。

    注意

    使用 HKR AddReg 将密钥直接置于服务状态下是违反合规性的行为。 需要将这些密钥添加到服务的 Parameters 键下才能合规。

    [Common.Params.reg]
    
    HKR, FilterDriverParams\DriverParam, ParamDesc, ,"Driverparam for filter"
    HKR, FilterDriverParams\DriverParam, default, ,"5"
    HKR, FilterDriverParams\DriverParam, type,  ,"int"
    
    HKR, FilterAdapterParams\AdapterParam, ParamDesc, ,"Adapterparam for filter"
    HKR, FilterAdapterParams\AdapterParam, default, ,"10"
    HKR, FilterAdapterParams\AdapterParam, type,  ,"int"
    
    HKR, FilterInstanceParams\InstanceParam, ParamDesc, ,"Instance param for filter"
    HKR, FilterInstanceParams\InstanceParam, default, ,"15"
    HKR, FilterInstanceParams\InstanceParam, type,  ,"int"