NDIS Filter开发-OID 请求
NDIS 定义对象标识符 (OID) 值来标识适配器参数,其中包括操作参数,例如设备特征、可配置的设置和统计信息。 Filter驱动程序可以查询或设置基础驱动程序的操作参数,或过滤/覆盖顶层驱动程序的 OID 请求。
NDIS 还为 NDIS 6.1 及更高版本的Filter驱动程序提供直接 OID 请求接口。 直接 OID 请求路径支持经常查询或设置的 OID 请求。 例如,IPsecv2 (IPsecv2) 接口为直接 OID 请求提供 OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID。 对于 NDIS 驱动程序,直接 OID 请求接口是可选的。
对于 NDIS 6.81 及更高版本的Filter驱动程序,NDIS 提供 同步 OID 请求接口。 同步 OID 请求路径支持需要同步的 OID 或不应由Filter驱动程序(如 RSSv2 OID)排队的 OID。 同步 OID 请求接口对于 NDIS 驱动程序是可选的,但如果Filter驱动程序播发对 RSSv2 的支持,则是必需的。
在 NDIS Filter驱动程序中筛选 OID 请求
Filter驱动程序可以处理由过度分配驱动程序发起的 OID 请求。 NDIS 调用 FilterOidRequest 函数来处理每个 OID 请求。 Filter驱动程序可以通过调用 NdisFOidRequest 函数将 OID 请求转发到基础驱动程序。
NDIS 可以调用Filter驱动程序的 FilterCancelOidRequest 函数来取消 OID 请求。 当 NDIS 调用 FilterCancelOidRequest 时,Filter驱动程序应尝试尽快调用 NdisFOidRequest 函数。
下图演示了筛选的 OID 请求:

Filter驱动程序可以通过分别从 FilterOidRequest 返回NDIS_STATUS_SUCCESS或NDIS_STATUS_PENDING,以同步或异步方式完成 OID 请求。 FilterOidRequest 还可以同步完成并出现错误状态。
成功处理 OID 集请求的Filter驱动程序必须在从 OID 集请求返回时在 NDIS_OID_REQUEST 结构中设置 SupportedRevision 成员。 SupportedRevision 成员通知 OID 请求的发起方有关驱动程序支持的修订版。
如果 FilterOidRequest 返回NDIS_STATUS_PENDING,则必须在完成 OID 请求后调用 NdisFOidRequestComplete 函数。 在这种情况下,驱动程序会在 NdisFOidRequestComplete 的 OidRequest 参数中传递请求的结果。 驱动程序在 NdisFOidRequestComplete 的 Status 参数中传递请求的最终状态。
如果 FilterOidRequest 返回NDIS_STATUS_SUCCESS,它将在 OidRequest 参数处的 NDIS_OID_REQUEST 结构中返回查询请求的结果。 在这种情况下,驱动程序不会调用 NdisFOidRequestComplete 函数。
若要将 OID 请求转发到基础驱动程序,Filter驱动程序会调用 NdisFOidRequest 函数。 如果不应将请求转发到基础驱动程序,Filter驱动程序可以立即完成请求。 若要在不转发的情况下完成请求,驱动程序可以从 FilterOidRequest 返回NDIS_STATUS_SUCCESS (或错误状态) ,也可以在返回NDIS_STATUS_PENDING后调用 NdisFOidRequestComplete 。
注意 在驱动程序调用 NdisFOidRequest 之前,驱动程序必须分配 NDIS_OID_REQUEST 结构,并通过调用 NdisAllocateCloneOidRequest 将请求信息传输到新结构。
转发的请求的处理方式与Filter驱动程序发起的请求相同。
在基础驱动程序完成转发的请求后,Filter驱动程序可以修改响应(如有必要),并将其传递给过度分配的驱动程序。
Filter驱动程序在处于“正在重启”、“正在运行”、“正在暂停”或“已暂停”状态时,可以接收来自过度驱动程序的 OID 请求。
注意 与微型端口驱动程序一样,Filter驱动程序一次只能接收一个 OID 请求。 由于 NDIS 序列化发送到Filter模块的请求,因此在完成上一个请求之前,无法在 FilterOidRequest 中调用Filter驱动程序。
下面是Filter驱动程序修改 OID 请求的示例:
Filter驱动程序添加标头。 在这种情况下,在驱动程序从基础驱动程序收到对 OID_GEN_MAXIMUM_FRAME_SIZE 查询的响应后,Filter将从响应中减去其标头的大小。 驱动程序减去其标头大小,因为驱动程序在每个发送的数据包的前面插入一个标头,并删除每个接收的数据包中的标头。
从 NDIS Filter驱动程序生成 OID 请求
Filter驱动程序可以通过调用 NdisFOidRequest 函数来发起 OID 查询或设置对基础驱动程序的请求。
下图演示了Filter驱动程序发起的 OID 请求:

在Filter驱动程序调用 NdisFOidRequest 函数后,NDIS 将调用下一个基础驱动程序的请求函数。
为了同步完成, NdisFOidRequest 返回NDIS_STATUS_SUCCESS或错误状态。 为了异步完成, NdisFOidRequest 返回NDIS_STATUS_PENDING。
若要确定基础驱动程序成功处理了哪些信息,发出 OID 请求的Filter驱动程序必须在 OID 请求返回后检查NDIS_OID_REQUEST结构中 SupportedRevision 成员中的值。
如果 NdisFOidRequest 返回NDIS_STATUS_PENDING,则 NDIS 会在基础驱动程序完成 OID 请求后调用 FilterOidRequestComplete 函数。 在这种情况下,NDIS 在 FilterOidRequestComplete 的 OidRequest 参数处传递请求的结果。 NDIS 在 FilterOidRequestComplete 的 Status 参数中传递请求的最终状态。
如果 NdisFOidRequest 返回NDIS_STATUS_SUCCESS,它将在 OidRequest 参数处的 NDIS_OID_REQUEST 结构中返回查询请求的结果。 在这种情况下,NDIS 不会调用 FilterOidRequestComplete 函数。
当驱动程序处于“正在重启”、“正在运行”、“正在暂停”或“已暂停”状态时,驱动程序可以调用 NdisFOidRequest。
注意 Filter驱动程序应跟踪其发起的 OID 请求,并确保在此类请求完成时不会调用 NdisFOidRequestComplete 函数。
Filter驱动直接 OID 请求
为了支持直接 OID 请求路径,Filter驱动程序在 NDIS_FILTER_DRIVER_CHARACTERISTICS 结构中提供 FilterXxx 函数入口点,NDIS 为Filter驱动程序提供 NdisFXxx 函数。
直接 OID 请求接口类似于标准 OID 请求接口。 例如, NdisFDirectOidRequest 和 FilterDirectOidRequest 函数类似于 NdisFOidRequest 和 FilterOidRequest 函数。
注意 NDIS 6.1 及更高版本支持用于直接 OID 请求接口的特定 OID。 不支持在 NDIS 6.1 和某些 NDIS 6.1 OID 之前存在的 OID。
Filter驱动程序必须能够处理未序列化的直接 OID 请求。 与标准 OID 请求接口不同,NDIS 不会将直接 OID 请求与使用直接 OID 接口或标准 OID 请求接口发送的其他请求序列化。 此外,Filter驱动程序必须能够在 IRQL <= DISPATCH_LEVEL 处理直接 OID 请求。
若要支持直接 OID 请求接口,请使用标准 OID 请求接口的文档。 下表显示了直接 OID 请求接口中的函数与标准 OID 请求接口之间的关系:

Filter驱动同步 OID 请求
为了支持同步 OID 请求路径,Filter驱动程序在调用 NdisFRegisterFilterDriver 函数时,在 NDIS_FILTER_DRIVER_CHARACTERISTICS 结构中提供 FilterSynchronousOidRequest 函数入口点。
NDIS 6.81 支持用于同步 OID 请求接口的特定 OID。 不支持在 NDIS 6.80 和某些 NDIS 6.80 OID 之前存在的 OID。
若要支持同步 OID 请求接口,请使用标准 OID 请求接口的文档。 下表显示了同步 OID 请求接口中的函数与标准 OID 请求接口之间的关系:

相关文章:
NDIS Filter开发-OID 请求
NDIS 定义对象标识符 (OID) 值来标识适配器参数,其中包括操作参数,例如设备特征、可配置的设置和统计信息。 Filter驱动程序可以查询或设置基础驱动程序的操作参数,或过滤/覆盖顶层驱动程序的 OID 请求。 NDIS 还为 NDIS 6.1 及更高版本的Fi…...
软考 系统架构设计师之考试感悟2
接前一篇文章:软考 系统架构设计师之考试感悟 今天是2024年5月25号,是个人第二次参加软考系统架构师考试的正日子。和上次一样,考了一天,身心俱疲。天是阴的,心是沉的,感觉比上一次更加沉重。仍然有诸多感悟…...
[学习笔记](b站视频)PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】(ing)
视频来源:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】 前面P1-P5属于环境安装,略过。 5-6.Pytorch加载数据初认识 数据文件: hymenoptera_data # read_data.py文件from torch.utils.data import Dataset …...
Flutter开发效率提升1000%,Flutter Quick教程之定义构造参数和State成员变量
一个Flutter页面,可以定义页面构造参数和State成员变量。所谓页面构造参数,就是当前页面构造函数里面的参数。 比如下面代码,a就是构造参数,a1就是State成员变量。 class Testpage extends StatefulWidget {String a;const Test…...
R语言数据分析-xgboost模型预测
XGBoost模型预测的主要大致思路: 1. 数据准备 首先,需要准备数据。这包括数据的读取、预处理和分割。数据应该包括特征和目标变量。 步骤: 读取数据:从CSV文件或其他数据源读取数据。数据清理:处理缺失值、异常值等…...
使用redis的setnx实现分布式锁
在Redis中,SETNX 是 “Set If Not Exists”(如果不存在,则设置)的缩写。这是一个原子操作,用于设置一个键的值,前提是这个键不存在。如果键已经存在,.则不会执行任何操作。 封装方法trylock,用…...
LangChain进行文本摘要 总结
利用LangChain进行文本摘要的详细总结 LangChain是一个强大的工具,可以帮助您使用大型语言模型(LLM)来总结多个文档的内容。以下是一个详细指南,介绍如何使用LangChain进行文本摘要,包括使用文档加载器、三种常见的摘…...
政安晨【零基础玩转各类开源AI项目】:解析开源项目的论文:Physical Non-inertial Poser (PNP)
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本文解析的原始论文为:https://arxiv.org/…...
【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析
在计算机视觉领域,物种识别和图像相似度比较是两个重要的研究方向。本文通过结合深度学习和图像处理技术,基于OpenCV和TensorFlow的MobileNetV2的预训练模型模,实现物种识别和个体相似度分析。本文详细介绍该实验过程并提供相关代码。 一、名…...
建模杂谈系列244 TimeTraveller
说明 所有的基于时间处理和运行的程序将以同样的节奏同步和执行 TT(TimeTraveller)是一个新的设计,它最初会服务与量化过程的大量任务管理:分散开发、协同运行。但是很显然,TT的功能将远不止于此,它将服务大量的,基于时…...
基于MingGW64 GCC编译Windows平台上的 libuvc
安装cmake 打开cmake官网 https://cmake.org/download/,下载安装包: 安装时选择将cmake加到系统环境变量里。安装完成后在新的CMD命令窗口执行cmake --version可看到输出: D:\>cmake --version cmake version 3.29.3 CMake suite mainta…...
【Linux】网络高级IO
欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:Linux 目录 👉🏻五种IO模型👉🏻消息通信的同步异步与进程线程的同步异步有什么不同?👉…...
【C++ ——— 继承】
文章目录 继承的概念即定义继承概念继承定义定义格式继承关系和访问限定符继承基类成员访问方式的变化 基类对象和派生类对象的赋值转换继承中的作用域派生类中的默认成员函数继承与友元继承与静态成员菱形继承虚继承解决数据冗余和二义性的原理继承的总结继承常见笔试面试题 继…...
kafka-守护启动
文章目录 1、kafka守护启动1.1、先启动zookeeper1.1.1、查看 zookeeper-server-start.sh 的地址1.1.2、查看 zookeeper.properties 的地址 1.2、查看 jps -l1.3、再启动kafka1.3.1、查看 kafka-server-start.sh 地址1.3.2、查看 server.properties 地址 1.4、再次查看 jps -l 1…...
TypeScript 中的命名空间和模块化
1. 命名空间(Namespace) 命名空间提供了一种逻辑上的代码分组机制,用于避免命名冲突和将相关代码组织在一起。它使用 namespace 关键字来定义命名空间,并通过点运算符来访问其中的成员。例如: // 定义命名空间 names…...
9 html综合案例-注册界面
9 综合案例-注册界面 一个只有html骨架的注册页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…...
Xilinx RFSOC 47DR 8收8发 信号处理板卡
系统资源如图所示: FPGA采用XCZU47DR 1156芯片,PS端搭载一组64Bit DDR4,容量为4GB,最高支持速率:2400MT/s; PS端挂载两片QSPI X4 FLASH; PS支持一路NVME存储; PS端挂载SD接口,用于存储程序&…...
ros2 launch 用法以及一些基础功能函数的示例
文章目录 launch启动一个节点的launch示例launch文件中添加节点的namespacelaunch文件中的话题名称映射launch文件中向节点内传入命令行参数launch文件中向节点内传入rosparam使用方法多节点启动命令行参数配置资源重映射ROS参数设置加载参数文件在launch文件中使用条件变量act…...
如何使用Python获取图片中的文字信息
如下有三中方法: 方法1. 使用Tesseract OCR(pytesseract) 安装依赖 首先,确保你已经安装了Tesseract OCR引擎(例如,通过你的操作系统的包管理器)。然后,你可以通过pip安装pytesse…...
C++知识点
1. 构造函数:当没有写任何构造函数(含拷贝构造),系统会生成默认的无参构造,并且访问属性是共有。 默认拷贝构造:当没有写任何的拷贝构造,系统会生成默认的拷贝构造->是一个浅拷贝 写了拷贝构造函数,这…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
大模型真的像人一样“思考”和“理解”吗?
Yann LeCun 新研究的核心探讨:大语言模型(LLM)的“理解”和“思考”方式与人类认知的根本差异。 核心问题:大模型真的像人一样“思考”和“理解”吗? 人类的思考方式: 你的大脑是个超级整理师。面对海量信…...
