NDIS Filter开发-PNP响应和安装

news2024/11/17 14:25:27

NDIS filter驱动可能是最容易生成的驱动之一,如果你安装了VS 2015 + WDK之后,你可以直接生成一个能运行的Filter驱动,它一般是ndislwf。

和大部分硬件不同,NDIS Filter驱动介于软件和硬件抽象层之上,它和硬件相关,但是只需要很少的硬件知识就可以理解;同时也需要一定的网络协议知识,并且NDIS对windows内核进行了很好的封转,故它是一个非常适合拿来入门的驱动程序,许多人也使用这个驱动来进行开发入门。

还有另外一点是,NDIS filter驱动是性能提升最大的驱动之一,它相比于socket来说会提升非常巨大。

Filter模块 PnP 事件通知

Filter驱动程序可以接收基础微型端口驱动程序接收的所有设备即插即用 (PnP) 通知。 此外,Filter驱动程序可以接收过度协议驱动程序接收的所有网络 PnP 通知。PnP 通知的处理特定于驱动程序。

下图演示了经过筛选的设备 PnP 事件通知:

9478772999db4fb1949c06cfd1c938f1.png 

Filter驱动程序提供 FilterDevicePnPEventNotify 函数,NDIS 调用该函数以传入设备 PnP 和电源管理事件通知。 这类似于 MiniportDevicePnPEventNotify 函数。

Filter驱动程序可以将设备 PnP 和电源管理事件转发到基础驱动程序。 若要转发设备 PnP 或电源管理事件,请调用 NdisFDevicePnPEventNotify 函数。

下图演示了经过筛选的网络 PnP 事件通知:

8cdfa4cc0cbd4212829a77932c4b0b15.png

 

Filter驱动程序提供 FilterNetPnPEvent 函数,NDIS 调用该函数以传入网络 PnP 和电源管理事件通知。 这类似于 ProtocolNetPnPEvent 函数。

Filter驱动程序可以将网络 PnP 和电源管理事件转发到过度覆盖的驱动程序。 若要转发网络 PnP 或电源管理事件,请调用 NdisFNetPnPEvent 函数。

Filter驱动程序应处理驱动程序堆栈更改。 如果需要允许处理这些事件,NDIS 可以在 PnP 或电源管理通知后启动暂停操作。

Filter模块状态指示

Filter驱动程序可以提供 NDIS 在基础驱动程序报告状态时调用的 FilterStatus 函数。 Filter驱动程序还可以启动状态指示。

下图演示了筛选的状态指示:

b547376a95df44f2a89a3602c036e7bd.png

在基础驱动程序调用状态指示函数 (NdisMIndicateStatusEx 或 NdisFIndicateStatus) 之后,NDIS 调用Filter驱动程序的 FilterStatus 函数。 

Filter驱动程序在其 FilterStatus 函数中调用 NdisFIndicateStatus,以将筛选的状态指示传递给过分的驱动程序。 Filter驱动程序可以通过不调用 NdisFIndicateStatus) 来筛选出状态指示,或者在调用 NdisFIndicateStatus 之前修改指示的状态。

若要发出状态指示,Filter驱动程序调用 NdisFIndicateStatus ,而无需事先调用 FilterStatus。

在这种情况下,Filter驱动程序应将 SourceHandle 成员设置为 NDIS 传递给 FilterAttach 函数的 NdisFilterHandle 参数的句柄。 如果状态指示与 OID 请求相关联,则Filter驱动程序可以设置 DestinationHandle 和 RequestId 成员,以便 NDIS 可以提供特定协议绑定的状态指示。

在Filter驱动程序调用 NdisFIndicateStatus 后,NDIS (ProtocolStatusEx 或 FilterStatus 调用状态函数) 下一个过度覆盖的驱动程序。

NDIS Filter驱动程序安装

本部分提供有关安装 NDIS Filter驱动程序的信息。 轻型Filter驱动程序不同于Filter中间驱动程序。 配置管理器为每个微型端口适配器提供 NDIS Filter模块列表。 没有与Filter驱动程序关联的虚拟设备 (或虚拟微型端口) 与 NDIS Filter中间驱动程序一样。

若要安装Filter驱动程序,必须提供单个 INF 文件。 配置管理器从 INF 文件读取有关Filter驱动程序的配置信息,并将其复制到注册表。

Filter驱动程序 INF 文件定义网络服务,Filter驱动程序没有微型端口 INF 文件。 

指定Filter驱动程序绑定关系

在网络驱动程序 INF 文件中, UpperRange 条目列出了可能的上限绑定, LowerRange 条目列出了可能的较低绑定。 这些条目可以包含各种系统定义的值。 

对于Filter驱动程序,必须将 UpperRange 和 LowerRange 条目的值分别设置为 noupper 和 nolower。 以下示例演示了Filter驱动程序的这些 INF 文件条目。

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

在Filter驱动程序中,Filter INF 文件中的 FilterMediaTypes 条目定义驱动程序与其他驱动程序的绑定。 FilterMediaTypes 指定筛选驱动程序服务的媒体类型。  以下示例演示了 Filter驱动程序的 FilterMediaTypes 条目。 

HKR, Ndi\Interfaces, FilterMediaTypes,,"ethernet"

当计算机加载Filter驱动程序时,驱动程序将插入到所有现有的协议到适配器绑定中,具体取决于 FilterMediaTypes 列出的媒体类型。

注意: 在某些版本上,Filter驱动存在个数限制。 

访问Filter驱动程序的配置信息

NDIS 支持一组函数,这些函数提供对Filter驱动程序注册表参数的访问权限。 Filter驱动程序可以在附加或重启操作期间或在处理即插即用 (PnP) 通知时访问这些参数。 

Filter驱动程序调用 NdisOpenConfigurationEx 函数来访问注册表设置。 如果Filter驱动程序通过调用 NdisFRegisterFilterDriver 函数获取了 NDIS_CONFIGURATION_OBJECT 结构的 NdisHandle 成员中的句柄,则 NdisOpenConfigurationEx 函数将提供存储Filter驱动程序配置参数的注册表位置的句柄。 Filter驱动程序可以使用配置句柄,直到调用 NdisFDeregisterFilterDriver 函数。

如果Filter驱动程序从 FilterAttach 函数的 NdisFilterHandle 参数中获取了 NdisHandle 中的句柄,则 NdisOpenConfigurationEx 提供存储Filter模块配置参数的注册表位置的句柄。 Filter驱动程序可以使用配置句柄,直到 NDIS 分离Filter模块并且 FilterDetach 函数返回。 如果监视Filter驱动程序在 NDIS_CONFIGURATION_OBJECT 结构的 Flags 成员中指定 NDIS_CONFIG_FLAG_FILTER_INSTANCE_CONFIGURATION 标志,则当在同一微型端口适配器上配置多个Filter模块时,驱动程序可以访问特定Filter模块的Filter模块配置。 修改Filter驱动程序不得使用此标志。

驱动程序访问配置信息后,驱动程序必须调用 NdisCloseConfiguration 函数来释放配置句柄和相关资源。

下面是系统默认生成的Filter inf文件

;-------------------------------------------------------------------------
; ndislwf1.INF -- NDIS LightWeight Filter Driver
;
; TODO: Search for comments marked "TODO:", and follow their instructions to
; customize this INF for your driver.  Then delete the "TODO:" comments.
;-------------------------------------------------------------------------

[version]
; Do not change these values
Signature       = "$Windows NT$"
Class           = NetService
ClassGUID       = {4D36E974-E325-11CE-BFC1-08002BE10318}
; TODO: Customize this string for your company name
Provider        = %Msft%
DriverVer       = 
CatalogFile     = ndislwf1.cat


; TODO: Include each architecture for which your driver package contains a
; compiled binary.  If you do not supply a driver compiled for ia64, delete the
; NTia64 section.
[Manufacturer]
%Msft%=MSFT,NTx86,NTia64,NTamd64,NTarm,NTarm64

; MS_ndislwf1 can be used with netcfg.exe to install/uninstall the driver.
[MSFT.NTx86]
%ndislwf1_Desc%=Install, MS_ndislwf1

[MSFT.NTia64]
%ndislwf1_Desc%=Install, MS_ndislwf1

[MSFT.NTamd64]
%ndislwf1_Desc%=Install, MS_ndislwf1

[MSFT.NTarm]
%ndislwf1_Desc%=Install, MS_ndislwf1

[MSFT.NTarm64]
%ndislwf1_Desc%=Install, MS_ndislwf1

;-------------------------------------------------------------------------
; Installation Section
;-------------------------------------------------------------------------
[Install]
AddReg=Inst_Ndi
; All LWFs must include the 0x40000 bit (NCF_LW_FILTER). Unlike miniports, you
; don't usually need to customize this value.
Characteristics=0x40000

; This must be a random, unique value.
; FILTER_UNIQUE_NAME in filter.h must match this GUID identically.
; Both should have {curly braces}.
NetCfgInstanceId="{76610a0d-1aed-494e-84c8-9661e499deee}"

Copyfiles = ndislwf1.copyfiles.sys

[SourceDisksNames]
1=%ndislwf1_Desc%,"",,

[SourceDisksFiles]
; TODO: Include any related files that should be installed with your driver.
ndislwf1.sys=1

[DestinationDirs]
DefaultDestDir=12
ndislwf1.copyfiles.sys=12

[ndislwf1.copyfiles.sys]
ndislwf1.sys,,,2


;-------------------------------------------------------------------------
; Ndi installation support
;-------------------------------------------------------------------------
[Inst_Ndi]
HKR, Ndi,Service,,"ndislwf1"
HKR, Ndi,CoServices,0x00010000,"ndislwf1"
HKR, Ndi,HelpText,,%ndislwf1_HelpText%
; TODO: Set the FilterClass here.  The FilterClass controls the order in which
; filters are bound to the underlying miniport.  Possible options include:
;     Custom, Diagnostic, Failover, Loadbalance, Vpn, Compression, Encryption, Scheduler
; See MSDN for a description of each.
HKR, Ndi,FilterClass,, compression
; TODO: Specify whether you have a Modifying or Monitoring filter.
; For a Monitoring filter, use this:
;     HKR, Ndi,FilterType,0x00010001, 1 ; Monitoring filter
; For a Modifying filter, use this:
;     HKR, Ndi,FilterType,0x00010001, 2 ; Modifying filter
HKR, Ndi,FilterType,0x00010001,2
; Do not change these values
HKR, Ndi\Interfaces,UpperRange,,"noupper"
HKR, Ndi\Interfaces,LowerRange,,"nolower"
; TODO: Ensure that the list of media types below is correct.  Typically,
; filters include "ethernet".  Filters may also include "ppip" to include
; native WWAN stacks, but you must be prepared to handle the packet framing.
; Possible values are listed on MSDN, but common values include:
;     ethernet, wan, ppip, wlan
HKR, Ndi\Interfaces, FilterMediaTypes,,"ethernet, wan, ppip"
; TODO: Specify whether you have a Mandatory or Optional filter.
; For a Mandatory filter, use this:
;     HKR, Ndi,FilterRunType,0x00010001, 1 ; Mandatory filter
; For an Optional filter, use this:
;     HKR, Ndi,FilterRunType,0x00010001, 2 ; Optional filter
HKR, Ndi,FilterRunType,0x00010001, 1 ; Mandatory filter

;-------------------------------------------------------------------------
; Service installation support
;-------------------------------------------------------------------------
[Install.Services]
; TODO: You may want to add the SPSVCINST_STARTSERVICE flag, like this:
;     AddService=ndislwf1,0x800,ndislwf1_Service_Inst ; SPSVCINST_STARTSERVICE
AddService=ndislwf1,,ndislwf1_Service_Inst

[ndislwf1_Service_Inst]
DisplayName     = %ndislwf1_Desc%
ServiceType     = 1 ;SERVICE_KERNEL_DRIVER
; Typically you will want your filter driver to start with SERVICE_SYSTEM_START.
; If it is an Optional filter, you may also use 3;SERVICE_DEMAND_START.
StartType       = 1 ;SERVICE_SYSTEM_START
ErrorControl    = 1 ;SERVICE_ERROR_NORMAL
ServiceBinary   = %12%\ndislwf1.sys
LoadOrderGroup  = NDIS
Description     = %ndislwf1_Desc%
AddReg          = Common.Params.reg, NdisImPlatformBindingOptions.reg

[Install.Remove.Services]
; The SPSVCINST_STOPSERVICE flag instructs SCM to stop the NT service
; before uninstalling the driver.
DelService=ndislwf1,0x200 ; SPSVCINST_STOPSERVICE

[Common.Params.reg]
; TODO: You can add any sort of NDIS parameters here.  Filter drivers
; don't always need NDIS parameters, so it's okay to have nothing here.

; TODO: Remove the sample parameters below.

; Sample 1: "DriverParam" is a per-driver parameter.
HKR, FilterDriverParams\DriverParam,     ParamDesc,   , "Driverparam for lwf"
HKR, FilterDriverParams\DriverParam,     default,     , "5"
HKR, FilterDriverParams\DriverParam,     type,        , "int"

; Sample 2: "AdapterParam" is a per-module parameter.
HKR, FilterAdapterParams\AdapterParam,   ParamDesc,   , "Adapterparam for lwf"
HKR, FilterAdapterParams\AdapterParam,   default,     , "10"
HKR, FilterAdapterParams\AdapterParam,   type,        , "int"

[NdisImPlatformBindingOptions.reg]
; By default, when an LBFO team or Bridge is created, all filters will be
; unbound from the underlying members and bound to the TNic(s). This keyword
; allows a component to opt out of the default behavior
; To prevent binding this filter to the TNic(s):
;   HKR, Parameters, NdisImPlatformBindingOptions,0x00010001,1 ; Do not bind to TNic
; To prevent unbinding this filter from underlying members:
;   HKR, Parameters, NdisImPlatformBindingOptions,0x00010001,2 ; Do not unbind from Members
; To prevent both binding to TNic and unbinding from members:
;   HKR, Parameters, NdisImPlatformBindingOptions,0x00010001,3 ; Do not bind to TNic or unbind from Members
HKR, Parameters, NdisImPlatformBindingOptions,0x00010001,0 ; Subscribe to default behavior



[Strings]
; TODO: Customize these strings.
Msft = "<Your manufacturer name>" ;TODO: Replace with your manufacturer name
ndislwf1_Desc = "ndislwf1 NDIS LightWeight Filter"
ndislwf1_HelpText = "ndislwf1 NDIS LightWeight Filter"




 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1792541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业无线wifi系统搭配高速路由,解决联网及数据传输

​面对日益复杂的工业应用场景,企业对无线网络的高速、可靠和安全提出了更高要求。星创易联SR600系列多网口4G路由器应运而生,为工业无线WiFi系统提供了一个性能卓越的高速路由方案。&#xff08;key-iot.com/iotlist/sr600-5.html&#xff09; SR600路由器集4G LTE、虚拟专用…

c++(内存分配,构造,析构)

#include <iostream>using namespace std; class Per { private:string name;int age;double *height;double *weigh; public://无参构造Per(){cout << "Per::无参构造" << endl;}//有参构造Per(string name,int age,double height,double weigh):…

C++候捷stl-视频笔记4

一个万用的hash function 哈希函数的形式&#xff0c;一种是一般函数(右边)&#xff0c;一种是成员函数(左边)&#xff0c;类的对象将成为函数对象 具体做法例子。直接把属性的所有hash值加起来&#xff0c;会在hashtable中会产生很多的碰撞&#xff0c;放在同一个bucket中的元…

Nginx的https功能

一.HTTPS功能简介 Web网站的登录页面都是使用https加密传输的&#xff0c;加密数据以保障数据的安全&#xff0c;HTTPS能够加密信息&#xff0c;以免敏感信息被第三方获取&#xff0c;所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议&#xff0c;HTTPS其实…

优化家庭网络,路由器无线中继配置全攻略(中兴E1600无线中继设置/如何解决没有预埋有线网络接口的问题/使用闲置路由实现WIFI扩展)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 网络优化 📒📒 操作步骤 📒💡适用场景🚨 常见问题及解决方案⚓️ 相关链接 ⚓️📖 介绍 📖 在现代家庭生活中,WiFi已经渗透到我们生活的每一个角落,成为了日常生活中不可或缺的一部分。然而,不少用户常常遇到W…

Bytebase 作为唯一数据库工具厂商,亮相亚马逊云科技中国峰会

作为云计算行业的风向标&#xff0c;亚马逊云科技中国峰会每年都吸引着全球顶尖企业和行业精英。此次峰会不仅展示了最新的 AI 技术趋势和解决方案&#xff0c;还为参展商和与会者提供了一个卓越的交流与合作平台。 Bytebase 作为全场唯一的数据库工具厂商亮相数据区&#xff0…

Windows下Qt5.14.2连接华为IoTDA平台

一、华为IoTDA简介 华为云物联网平台&#xff08;IoT 设备接入云服务&#xff09;提供海量设备的接入和管理能力&#xff0c;将物理设备联接到云&#xff0c;支撑设备数据采集上云和云端下发命令给设备进行远程控制&#xff0c;配合华为云其他产品&#xff0c;帮助您快速构筑物…

学习笔记——IP地址网络协议——VLSM-可变长子网掩码(子网划分)

四、VLSM-可变长子网掩码(子网划分) 1、为什么要子网划分 为什么要子网划分&#xff1a;有类IP地址规划的缺陷。IP地址空间只能按照默认的类别使用&#xff0c;例如一个B类地址&#xff0c;默认掩码为255.255.0.0&#xff0c;意味着这个地址空间里有2的16次方个IP&#xff0c;…

从零开始实现自己的串口调试助手(3) - 显示底部收发,优化串口打开/关闭

注意: 1. 我们要实现自发自收&#xff0c;要将tx&#xff0c;rx连起来 2.发送的 不能是中文符号&#xff0c;因为这可能导致&#xff0c;读取到的是英文符号 --> 导致接收到的size 和发送的size 大小不一致 3.注意同时定义两个槽函数的时候两个槽函数都会被调用&#xff0c;…

2024 年最新安装MAC-vue教学包括常见错误

花了一上午时间终于将 vue 的工程文件安装好了&#xff0c;本教材是傻瓜式操作&#xff0c;按着教程一步一步操作最后就可以看到页面了。 安装Node 1.在线地址&#xff1a; https://nodejs.org/en 2、点击 Download Node.js下载即可&#xff0c;下载完成后&#xff0c;傻瓜式的…

【数智化CIO展】吉家宠物CIO张志伟:深度挖掘数据价值是数字化发展趋势,才能实现企业精细化运营...

张志伟 本文由吉家宠物CIO张志伟投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级优秀CIO》榜单/奖项评选。丨推荐企业&#xff1a;观远数据 大数据产业创新服务媒体 ——聚焦数据 改变商业 中国“宠物经济”热潮不断攀升&#xff0c;国内宠物市场的竞…

共享使用模型以节省磁盘空间

如果同时使用了多个工具&#xff08;例如 Easy Diffusion, Stable Diffusion UI, Comfy)&#xff0c;则可以通过共享使用保存在某个目录下的模型文件来节省磁盘空间。 1. Easy Diffusion 在Easy Diffusion中可以创建一个链接文件夹&#xff0c;以便在不同的 Stable Diffusion…

宜选影票特惠电影票api接口需要哪些技术支持?宜选影票api文档

特惠电影票API接口的开发和对接需要一系列技术支持&#xff0c;以确保数据的准确性、接口的稳定性以及用户使用的便捷性。以下是所需的主要技术支持&#xff0c;以清晰的分点表示和归纳&#xff1a; 1. API开发技术 RESTful API&#xff1a;特惠电影票API接口通常采用RESTful…

【UML用户指南】-05-对基本结构建模-类

目录 1、名称&#xff08;name&#xff09; 2、属性 &#xff08;attribute&#xff09; 3、操作&#xff08;operation&#xff09; 4、对属性和操作的组织 4.1、衍型 4.2、职责 &#xff08;responsibility&#xff09; 4.3、其他特征 4.4、对简单类型建模 5、结构良…

Coolmuster iOS 数据擦除:隐私保护的终极方案

手机和平板电脑是我们不可或缺的伙伴&#xff0c;它们存储着我们的照片、联系人、私人消息以及工作文件。然而&#xff0c;当这些设备需要更换或者出售时&#xff0c;如何确保存储在其中的数据不被他人恢复和滥用&#xff0c;成为了一个严峻的问题。Coolmuster iOS 数据擦除&am…

2024年船舶、机械制造与海洋科学国际会议(ICSEMMS2024)

2024年船舶、机械制造与海洋科学国际会议&#xff08;ICSEMMS2024&#xff09; 会议简介 我们诚挚邀请您参加将在重庆隆重举行的2024年国际造船、机械制造和海洋科学大会&#xff08;ICSEMMS024&#xff09;。作为一项跨学科和跨学科的活动&#xff0c;本次会议旨在促进造船…

基于SSM+Jsp的二手手机回收平台系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

作业-day-240605

思维导图 C编程 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重 再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1 设计这两个类的构造函数、析构函数。 #include <iostream>using namespace std;class Per{ private:str…

easyexcel模板填充列表

引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>编写模板 编写代码 public class FillData {private String name;private Double number;pu…

Leetcode刷题(四十)

Pow(x, n)&#xff08;Medium&#xff09; 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。示例 1&#xff1a;输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a;输入&#xff1a;x 2.1…