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 请求接口之间的关系:

 

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

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

相关文章

Informer

I n f o r m e r Informer Informer 摘要&#xff1a; 长序列时间序列的预测 i n f o r m e r informer informer优点&#xff1a; P r o b s p a r e Probspare Probspare自关注机制&#xff0c;在时间复杂度和内存使用方面达到 O ( N l o g N ) O(NlogN) O(NlogN),在序列依…

IP协议1.0

基本概念&#xff1a; • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…

初识SDN

初识SDN 软件定义网络&#xff08;SDN&#xff0c;Software-Defined Networking&#xff09;是一种网络架构方法&#xff0c;它通过将网络控制平面与数据平面分离来实现网络的集中化控制和管理。 基本概念 以下是SDN的关键概念和组成部分&#xff1a; 1. SDN的基本概念 控制…

mybatis增删改查模板设置及设置调用

mybatis增删改查模板设置 系统配置文件完成以及连接好数据之后&#xff0c;就可以用这个mybatis了&#xff0c;首先写这个数据库的增删改查模板StashMapper.xml&#xff0c;这个东西是要放在DAO层中的奥&#xff0c;切记。 1.编写mybatis对应数据库的增删改查模板 在我的Sta…

持续总结中!2024年面试必问 20 道 Kafka面试题(一)

一、Kafka 的基础概念有哪些&#xff1f; Kafka 是一个分布式流处理平台&#xff0c;由 LinkedIn 开发&#xff0c;并于 2011 年成为 Apache 软件基金会的一部分。以下是 Kafka 的一些基础概念&#xff1a; Broker: Kafka 集群由多个 Broker 组成&#xff0c;每个 Broker 存储…

DKTCDR:Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation

Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation IEEE(CCF B.SCI 1)-Guoshuai Zhao, Xiaolong Zhang, Hao Tang, Jialie Shen, and Xueming Qian-2024 思路 在CDR中,构建连接两个域的桥梁是实现跨域推荐的基础。然而现在的CDR方法往往在连接两个域时忽…

通俗易懂理解RANSAC算法

RANSAC(Random Sample Consensus)&#xff0c;翻译为随机抽样一致算法。 算法思路&#xff1a;从所有观测中随机找到几个尽可能少的点去拟合模型&#xff0c;拟合后依次计算模型和所有观测数据的残差&#xff0c;当残差小于给定的阈值时&#xff0c;就将其判断为内点&#xff…

软件测试进阶

目录 一、自动化测试 1.概念 2.Selenium 2.1 概念 2.1.1 Selenium是什么&#xff1f; 2.1.2 Selenium特点 2.1.3 工作原理 2.2 SeleniumJava环境搭配 2.3 定位元素 2.3.1 CSS语法 2.3.2 XPath语法 2.4 应用 2.4.1 点击提交文本 2.4.2 模拟输入 2.4.3 清除文本 2…

统信UOS桌面操作系统1070上使用notepad--文本编辑器

原文链接&#xff1a;统信UOS桌面操作系统1070上使用notepad–文本编辑器 Hello&#xff0c;大家好啊&#xff01;今天我要向大家推荐一款在统信UOS桌面操作系统1070上非常好用的文本编辑器软件——“notepad–”。这款软件功能强大、操作简便&#xff0c;特别适合开发人员和日…

车载软件架构 - AUTOSAR 的信息安全框架

车载软件架构 - AUTOSAR 的信息安全架构 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗…

Nginx企业级负载均衡:技术详解系列(17)—— 长连接优化策略与下载服务器高效搭建

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。 今天咱们来聊聊Nginx的两个知识点&#xff1a;Nginx的长连接优化、如何将Nginx配置成下载服务器。 长连接配置详解 在Nginx的配置中&#xff0c;长连接是一个重要的性能优化手段。它允许一个TCP连接上发送多个请求和…

STM32作业实现(一)串口通信

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

C++指针和引用到内存泄漏,内存对齐——面试八股素材库

参考《CPrimer》2.3 复合结构&#xff1b; C内存管理&#xff0c;内存泄漏&#xff0c;内存对齐 目录 指针和引用 引用和指针差别 引用 指针 具体用法差异 常量指针和指向常量对象的指针 const int * ptr; 和 int const * ptr 和 int * const ptr; 区别 const int *ptr…

c++实现:小型公司的信息管理系统(关于多态)

前言&#xff1a; 介绍员工信息&#xff1a;一个小型公司的人员信息管理系统 某小型公司&#xff0c;主要有四类人员&#xff1a;经理、技术人员、销售经理和推销员。现在&#xff0c;需要存储这些人员的姓名、编号、级别、当前薪水。计算月薪总额并显示全部信息人员编号基数为…

Nginx企业级负载均衡:技术详解系列(16)—— Nginx的try_files指令,你知道这个指令是干什么的吗?

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。 今天咱们来聊一聊Nginx的try_files指令&#xff0c;你知道这个指令是干什么的吗&#xff1f; 如果你对Web服务器配置有所了解&#xff0c;那么你可能会对try_files指令感到好奇。这个指令实际上是Nginx配置中的一项强…

提高工作效率的招数

自己的工作效率为啥比别人低&#xff0c;因为不会使用工具&#xff0c;这就是一个大冤种。 1.血泪教训&#xff0c;写代码调用第三方接口的时候已经要打印调用日志&#xff0c;不然扯皮真的难搞。 2.pg 上测试或的时候由于schema 错误mybatis会给你报空指针一样&#xff0c;还…

服务失败后如何重试?

服务失败后如何重试&#xff1f; 在分布式系统和网络应用程序中&#xff0c;重试策略对于有效处理瞬时错误和网络不稳定性至关重要。 重试策略能让系统在发生故障时多次尝试操作&#xff0c;从而提高最终成功的可能性。 下图显示了 4 种常见的重试策略。 01 线性回退 线性回…

SMV 算法【python,机器学习,算法】

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一类按监督学习&#xff08;supervised learning&#xff09;方式对数据进行二元分类的广义线性分类器&#xff08;generalized linear classifier&#xff09;&#xff0c; 其决策边界是对学习样本求解的最大…

SSMP整合案例第六步 在前端页面上利用axios和element-ui与后端交互实现增删改

新增操作 正常我们都是从新增功能书写 查看源码 显示的是这个 在vue里面开下来 这样就能显示 点击确定 就能把数据发送到后台进行保存 //弹出添加窗口handleCreate() {this.dialogFormVisible true;},//重置表单resetForm() {},//添加handleAdd() {//绑定的是确定按钮 发起请…

浅谈Qt:跨平台开发的现在与未来

在软件开发领域&#xff0c;跨平台框架一直是热门话题。Qt作为一个成熟且功能丰富的跨平台C开发库&#xff0c;自从1991年由挪威Trolltech公司开发以来&#xff0c;已经走过了30多年的历程。Qt主要用于开发图形用户界面&#xff08;GUI&#xff09;程序&#xff0c;同时也支持开…