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. 构造函数:当没有写任何构造函数(含拷贝构造),系统会生成默认的无参构造,并且访问属性是共有。 默认拷贝构造:当没有写任何的拷贝构造,系统会生成默认的拷贝构造->是一个浅拷贝 写了拷贝构造函数,这…...

反转字符串中的单词-力扣
此题将问题分为三步进行解决: 第一步,删除字符串中多余的空格,removeSpaces函数中删除所有的空格,并手动在每个单词后添加一个空格,最后重构字符串s第二步,将整个字符串反转第三步,对反转后的字…...

Kotlin 重写与重载
文章目录 重写(Override)重载(Overload) 重写(Override) 重写通常是指子类覆盖父类的属性或方法,通常会标记为override: open class Base {open val name "Base"open f…...

关于高版本 Plant Simulation 每次保存是 提示提交comm对话框的处理方法
关于高版本 Plant Simulation 每次保存是 提示提交comm对话框的处理方法 如下图 将model saving history 修改为None即可 关于AutoCAD 2022 丢失模板库的问题 从新从以下地址打开即可: D:\Program Files\Autodesk\AutoCAD 2022\UserDataCache\zh-cn\Template...

C语言之旅:探索单链表
目录 一、前言 二、实现链表的功能: 打印 创建节点 尾插 尾删 头插 头删 查找 在指定位置之前插入数据 指定位置删除 在指定位置之后插入数据 打印 销毁 三、全部源码: 四、结语 一、前言 链表是一个强大且基础的数据结构。对于很多初…...

【安卓基础】-- 消息机制 Handler
目录 消息机制 Handler面试问题 消息机制 Handler 对handler机制的基本作用、用法、时序流程进行介绍,针对handler机制中的内存泄漏问题讲解:一篇读懂Android Handler机制 Android-Handler机制详解 全面解析 | Android之Handler机制 需要掌握的&#x…...

Optional 类
概述 到目前为止,臭名昭著的空指针异常是导致 Java 应用程序失败的最常见原因。以前,为了解决空指针异常,Google 公司著名的 Guava 项目引入了 Optional 类, Guava 通过使用检查空值的方式来防止代码污染,它鼓励程序员…...

自动微分技术在 AI for science 中的应用
本文简记我在学习自动微分相关技术时遇到的知识点。 反向传播和自动微分 以 NN 为代表的深度学习技术展现出了强大的参数拟合能力,人们通过堆叠固定的 layer 就能轻松设计出满足要求的参数拟合器。 例如,大部分图神经网络均基于消息传递的架构。在推理…...

ASM OMF single-file creation form 重命名
OMF下不能自动命名,需要重新命名的话:1 1. spfile 可以 create pfile from spfile 后再create spfile from pfile 2 redo? 3 datafile? Here are some details of the copy problem: a) You are not allowed to set the numbe…...

VGGNet
VGGNet CNN卷积网络的发展史 1. LetNet5(1998) 2. AlexNet(2012) 3. ZFNet(2013) 4. VGGNet(2014) 5. GoogLeNet(2014) 6. ResNet(2015) 7. DenseNet(2017) 8. EfficientNet(2019) 9. Vision Transformers(2020) 10. 自适应卷积网络(2021) 上面列出了发展到现在CNN的一些经典…...

SpringMVC:转发和重定向
1. 请求转发和重定向简介 参考该链接第9点 2. forward 返回下一个资源路径,请求转发固定格式:return "forward:资源路径"如 return "forward:/b" 此时为一次请求返回逻辑视图名称 返回逻辑视图不指定方式时都会默认使用请求转发in…...