windows RNDIS开发-概念

远程 NDIS (RNDIS) 是一种独立于总线的类,适用于动态 即插即用 (PnP) 总线(例如 USB、1394、蓝牙和 InfiniBand)上的以太网 (802.3) 网络设备。 远程 NDIS 通过抽象控制和数据通道在主计算机与远程 NDIS 设备之间定义与总线无关的消息协议。 远程 NDIS 足够精确,允许对主计算机上的远程 NDIS 设备提供与供应商无关的类驱动程序支持。

从 Windows XP 开始的 Microsoft Windows 版本包括适用于 USB 设备的远程 NDIS 驱动程序。 此 NDIS 微型端口驱动程序(Rndismp.sys)由 Microsoft 实现和维护,并作为所有受支持的 Windows 版本的一部分来分发。 可以在 %SystemRoot%\System32\drivers 目录中找到它。

若要将此驱动程序用于 USB 设备,IHV 必须提供一个 INF 文件,该文件遵循 远程 NDIS INF 模板中的模板。

远程 NDIS 消息从主机发送到远程 NDIS 设备,远程 NDIS 设备使用相应的完成消息进行响应。 消息还会以未经请求的方式从远程 NDIS 设备发送到主机。

远程 NDIS (RNDIS) 无需硬件供应商为连接到 USB 总线的网络设备编写 NDIS 微型端口设备驱动程序。 远程 NDIS 通过定义与总线无关的消息集并描述此消息集如何在 USB 总线上运行来实现此目的。 由于此远程 NDIS 接口是标准化的,因此一组主机驱动程序可以支持连接到 USB 总线的任意数量的网络设备。 这大大减轻了设备制造商的开发负担,提高了系统的整体稳定性,因为不需要新的驱动程序,并改进了最终用户体验,因为无需安装驱动程序来支持新的 USB 总线连接网络设备。 目前,Microsoft Windows 支持通过 USB 进行远程 NDIS。

下图显示了将设备制造商的 NDIS 微型端口替换为远程 NDIS 微型端口驱动程序和 USB 传输驱动程序的组合。 因此,设备制造商可以专注于设备实现,不必开发 Windows NDIS 设备驱动程序。

Microsoft 提供 NDIS 微型端口驱动程序 Rndismp.sys,该驱动程序实现远程 NDIS 消息集并与通用总线传输驱动程序通信,后者又与相应的总线驱动程序通信。 此 NDIS 微型端口驱动程序由 Microsoft 实现和维护,并作为 Windows 的一部分分发。

以下远程 NDIS 消息集反映了 NDIS 微型端口驱动程序接口的语义:

  • 初始化、重置和停止设备操作
  • 发送和接收网络数据包
  • 设置和查询设备操作参数
  • 指示媒体链接状态和监视设备状态

Microsoft 还提供 USB 总线传输驱动程序,该驱动程序实现一种机制,用于跨 USB 总线传输远程 NDIS 消息。 此驱动程序在远程 NDIS 微型端口驱动程序和特定于总线的驱动程序(如 USB)之间传输标准化的远程 NDIS 消息。 总线特定的驱动程序还需要将任何特定于总线的要求(例如电源管理)映射到标准化的远程 NDIS 消息。 USB 1.1 和 2.0 的传输驱动程序由 Microsoft 实现和维护,并作为 Windows 的一部分分发。

此结构允许将单个设备驱动程序用于具有特定于总线的传输层的任何远程 NDIS 设备。 此外,特定总线上的所有网络设备只需要一个总线传输层。

远程 NDIS 的优势

远程 NDIS 是经过充分理解和经过时间测试的 NDIS 体系结构的扩展。 NDIS 为特定于设备的 NDIS 微型端口驱动程序定义函数调用接口。 此接口定义用于发送和接收网络数据以及查询和设置配置参数和统计信息的基元。 远程 NDIS 通过为 NDIS 微型端口驱动程序接口定义消息包装来利用 NDIS,从而将 NDIS 处理代码从微型端口驱动程序移动到设备本身。 在此和其他方面,远程 NDIS 允许使用各种设备功能和性能级别。 远程 NDIS 模型具有许多优点:

  • 扩展性,无需更改特定于总线的消息传输机制;
  • 能够在短时间内通过更多总线支持更多协议;
  • 已为网络和外部总线设备模型验证的驱动程序体系结构;
  • 远程 NDIS 设备支持 NDIS 网络堆栈中已存在的增值机制;
远程 NDIS 的概念和定义

下面的内容概述了用于在主机和远程 NDIS 设备之间进行通信的信道和较低层驱动程序上的远程 NDIS 要求:

  • 控制通道:控制通道必须可靠,并确保按顺序传递。 它用于除网络数据包的传输之外的所有通信。 除 REMOTE_NDIS_HALT_MSG 和 REMOTE_NDIS_INDICATE_STATUS_MSG外,所有必需的控制消息都是主机启动的请求和响应交换。 设备必须在针对每个总线指定的超时期限内响应;
  • 数据通道:数据通道专用于网络数据包的传输。 它可能包含多个子通道, 例如,针对为相应总线定义的不同服务质量;
  • 初始化和拆解:控件和数据通道将按为相应总线指定的方式进行初始化和设置。 主机向远程 NDIS 设备发送 REMOTE_NDIS_INITIALIZE_MSG 消息。 远程 NDIS 设备在 响应消息REMOTE_NDIS_INITIALIZE_CMPLT中提供有关其类型 (无连接或面向连接的) 、支持的介质和版本的信息。主机或远程 NDIS 设备可以通过 REMOTE_NDIS_HALT_MSG 消息断开信道。 收到此消息后,将丢弃所有未完成的请求和数据包;
  • 设备状态定义:在总线级初始化之后,设备据说处于 RNDIS 未初始化状态。 收到REMOTE_NDIS_INITIALIZE_MSG并使用状态为 RNDIS_STATUS_SUCCESS 的REMOTE_NDIS_INITIALIZE_CMPLT进行响应时,设备将进入 RNDIS 初始化状态。收到REMOTE_NDIS_SET_MSG指定OID_GEN_CURRENT_PACKET_FILTER非零筛选器值后,设备将进入 RNDIS 数据初始化状态。处于 RNDIS-data-initialized 状态时,接收REMOTE_NDIS_SET_MSG为 OID_GEN_CURRENT_PACKET_FILTER指定零筛选器值会强制设备返回到 RNDIS 初始化状态。随时接收REMOTE_NDIS_HALT_MSG或总线级断开连接或硬重置会强制设备进入 RNDIS 未初始化状态;
  • Halt:每当设备处于 RNDIS 初始化或 RNDIS 数据初始化状态时,主机可以通过向设备发送REMOTE_NDIS_HALT_MSG来终止设备的远程 NDIS 功能;
  • 重置信道:发生错误(如消息超时)时,将重置信道。 当设备处于 RNDIS 初始化状态时,主机可以随时通过向设备发送 REMOTE_NDIS_RESET_MSG 消息来启动重置,并且设备必须在完成重置后发送响应消息。 例如,当发生错误(如消息超时)时,主机可能会启动重置。请注意,这是软重置,因为任何处理 (例如,面向连接的设备的 VC 在重置后) 继续有效。 在重置过程中,远程 NDIS 设备会丢弃所有未完成的请求和数据包。 远程设备可能会重置其某些硬件组件,但保持信道不变。如果远程 NDIS 设备执行重新启动,则此事件等效于“删除”后跟“添加”即插即用事件。 主机 NDIS 微型端口驱动程序将停止和删除,并添加新实例并启动。 将重新执行所有总线级和远程 NDIS 初始化。 远程 NDIS 设备可能会在发生严重设备故障时自行重启;
  • 流控制:远程 NDIS 设备可能需要执行流控制,以防止主机使用数据包溢出其数据缓冲区。 任何流控制预配或要求都是特定于总线的;
  • 数字字节排序:远程 NDIS 消息中的所有数值都必须以 little-endian 格式编码 (最低有效字节第一) ;
  • NDIS 消息封装:对于在本机总线消息或基元中封装 NDIS 消息的方式,没有远程 NDIS 规范;
RNDIS 消息传送

有两种类型的远程 NDIS 消息:控制消息和数据消息。 控制消息允许主机和远程 NDIS 设备通过信道相互通信。 数据消息包含主机和设备之间通信所需的消息数据信息,并通过数据通道进行通信。

远程 NDIS 控制消息:远程 NDIS 控制消息可由主机发送到远程 NDIS 设备,远程 NDIS 设备可以发送到主机。 以太网 802.3 无连接设备必须支持以下远程 NDIS 控制消息:

  • REMOTE_NDIS_INITIALIZE_MSG
  • REMOTE_NDIS_INITIALIZE_CMPLT
  • REMOTE_NDIS_HALT_MSG
  • REMOTE_NDIS_QUERY_MSG
  • REMOTE_NDIS_QUERY_CMPLT
  • REMOTE_NDIS_SET_MSG
  • REMOTE_NDIS_SET_CMPLT
  • REMOTE_NDIS_RESET_MSG
  • REMOTE_NDIS_RESET_CMPLT
  • REMOTE_NDIS_INDICATE_STATUS_MSG
  • REMOTE_NDIS_KEEPALIVE_MSG
  • REMOTE_NDIS_KEEPALIVE_CMPLT

远程 NDIS 数据消息:远程 NDIS 设备必须通过 REMOTE_NDIS_PACKET_MSG 消息结构中包含的远程 NDIS 数据包发送和接收数据。 远程 NDIS 数据包还可能包含带外数据以及通过网络传输的数据。

无连接 (例如 802.3) 和面向连接的 (例如,ATM) 设备使用相同的 REMOTE_NDIS_PACKET_MSG 消息结构,以便于处理数据包的通用代码。

远程 NDIS 设备控制

主机使用REMOTE_NDIS_QUERY_MSG和REMOTE_NDIS_SET_MSG来控制远程 NDIS 设备的操作。 NDIS 对象 ID (OID) 与每条消息一起使用,以标识设备操作参数或统计信息计数器。 远程 NDIS OID 列表分为两组:常规 OID 和 802.3 特定 OID。 此外,每个组都包含统计 OID 查询的一个子部分。 任何网络设备都需要常规 OID。

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

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

相关文章

【微信小程序】页面导航

声明式导航 导航到 tabbar 页 tabBar页面指的是被配置为tabBar的页面。 在使用<navigator>组件跳转到指定的tabBar页面时&#xff0c;需要指定url属性和open-type属性&#xff0c;其中&#xff1a; url 表示要跳转的页面的地址&#xff0c;必须以/开头open-type表示跳…

spring boot3登录开发-2(3邮件验证码接口实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 上文衔接 接口设计与实现 1.接口分析 2.实现思路 3.代码实现 1.定义验证码短信HTML模板枚举类 2.定义验证码业务接口 3. 验证码业务接口实现 4.控制层代码 4.测试 写…

场外个股期权标的有哪些?

今天带你了解场外个股期权标的有哪些&#xff1f;场外个股期权是一种金融衍生品&#xff0c;它不在交易所内进行交割&#xff0c;而是在交易所以外的场所进行交易的股票期权合约。 场外个股期权标的有哪些&#xff1f; 场外个股期权的标的通常包括A股市场上的融资融券标的&…

ARM服务器在云手机中可以提供哪些支持

ARM服务器作为云手机的底层支撑&#xff0c;在很多社媒APP或者电商APP平台都有着很多看不见的功劳&#xff0c;可以说ARM扮演着至关重要的底层支持角色&#xff1b; 首先&#xff0c;ARM 服务器为云手机提供了强大的计算能力基础。云手机需要处理大量的数据和复杂的运算&#x…

微服务第一轮

课程文档 目录 一、业务流程 1、登录 Controller中的接口&#xff1a; Service中的实现impl&#xff1a; Service中的实现impl所继承的接口IService&#xff08;各种方法&#xff09;&#xff1a; VO&#xff1a; DTO&#xff1a; 2、搜索商品 ​Controller中的接口&a…

【亚马逊云科技 CSDN 联合巨献】 「对话AI 构建者:从基础到应用的 LLM 全景培训」 限时免费!

&#x1f680;&#x1f31f;【亚马逊云科技 & CSDN 联合巨献】 &#x1f4da;「对话AI 构建者&#xff1a;从基础到应用的 LLM 全景培训」&#x1f525; 限时免费&#xff01; &#x1f4c6; 抓紧时间&#xff01;6月7日前注册&#xff0c;原价 399&#xff0c;现在仅需 0…

C基础与SDK调试方法

REVIEW 上次学习了一下软件使用流程zynq PS点灯-CSDN博客 本次学习一下C编程基础与调试方法 1. 硬件编程原理 小梅哥视频链接&#xff1a; 07_Xilinx嵌入式裸机硬件编程原理_哔哩哔哩_bilibili 对应的课程笔记&#xff1a;【zynq课程笔记】【裸机】【第7课 】【硬件编程原理…

C++ STL - 容器

C STL&#xff08;标准模板库&#xff09;中的容器是一组通用的、可复用的数据结构&#xff0c;用于存储和管理不同类型的数据。 目录 零. 简介&#xff1a; 一 . vector&#xff08;动态数组&#xff09; 二. list&#xff08;双向链表&#xff09; 三. deque&#xff08…

yolov8摔倒检测(包含数据集+训练好的模型)

基于先进的YOLOv8模型&#xff0c;实现了一套高效可靠的人体摔倒检测系统。YOLOv8作为YOLO系列的最新成员&#xff0c;以其卓越的检测速度和准确性&#xff0c;在计算机视觉领域尤其是目标检测任务中表现出色。本系统不仅能够实时处理视频流或监控画面&#xff0c;还能对静态图…

SwiftUI中Menu和ControlGroup的使用

本篇文章主要介绍一下Menu组件和ControlGroup组件的使用。Menu组件是在iOS 14&#xff08;tvOS 17&#xff09;推出的一个组件&#xff0c;点击后提供一个可选择的操作列表。ControlGroup组件是一个容器视图&#xff0c;以视觉上适当的方式为给定的上下文显示语义相关的控件&am…

【面试干货】SQL语言分类

【面试干货】SQL语言分类 1、数据查询语言&#xff08;DQL&#xff09;2、数据操纵语言&#xff08;DML&#xff09;3、数据定义语言&#xff08;DDL&#xff09;4、数据控制语言&#xff08;DCL&#xff09;5、结语 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

使用gradio库实现Web应用,允许用户上传图像,并使用YOLOv8模型对图像进行目标检测。

一、Gradio Gradio 详细介绍 Gradio 是一个用于构建和分享机器学习模型和数据科学应用的开源Python库。它简化了创建交互式Web界面的过程&#xff0c;让开发者可以快速搭建原型并与他人分享。 主要特性 易用性&#xff1a; 无需前端开发经验&#xff1a;只需几行Python代码就…

论工业交换机的工业级芯片的重要性

工业交换机作为工业网络中的重要设备&#xff0c;其性能和稳定性对整个工业生产过程至关重要。而工业级芯片作为工业交换机的核心组成部分&#xff0c;更是承载着重要的功能和责任。工业级芯片具有承受恶劣环境的能力&#xff0c;能够在高温、高压、强电磁干扰等恶劣条件下稳定…

html+CSS+js部分基础运用15

1、完成输入框内容的实时反向输出。 2、银行账户余额变动自动通知项目。 设计要求&#xff1a;单击按钮后&#xff0c;余额按照输入框的数额减少&#xff0c;同时将按钮式的提示信息&#xff08;金额&#xff09;同步改变。利用侦听属性实现余额发生变化时发出提示信息&#x…

Django render()函数页面渲染

1&#xff0c; render() 函数 在Django框架中&#xff0c;render() 函数是一个非常有用的快捷方式&#xff0c;用于从视图函数返回一个完整的HTTP响应。它负责将给定的模板与上下文数据结合&#xff0c;渲染出最终的HTML页面&#xff0c;并返回一个HttpResponse对象。 from d…

全能大模型AIGC产品的使用体验、选择倾向与未来展望

随着人工智能技术的迅猛发展&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;领域正迎来前所未有的繁荣。其中&#xff0c;全能大模型产品以其强大的生成能力和广泛的应用场景&#xff0c;吸引了众多用户的关注。腾讯元宝APP的上线更是为这一领域注入了新的活力。本文…

第10周 企业认证、分布式事务,分布式锁方案落地

第10周 企业认证、分布式事务,分布式锁方案落地 1. 基于Redis提高请求响应**********************************************************************************************本周我们将对企业入驻认证的流程进行落地,并且结合分布式缓存中间件Redis与Redisson进行相关的技术…

企业(园区)智慧能源双碳平台解决方案

园区作为工业企业集聚区&#xff0c;在提供了大量基础设施和公共服务的同时也成为了碳排放的主要源头。工业园区的耗能约占全社会总耗能的69%&#xff0c;碳排放占全国总排放约31%。工业园区节能、减耗、提质、减碳工作的落实&#xff0c;是我国实现碳达峰碳中和目标的必然要求…

【python】ModuleNotFoundError: No module named ‘timm’

成功解决“ModuleNotFoundError: No module named ‘timm’”错误的全面指南 一、引言 在Python编程中&#xff0c;经常会遇到各种导入模块的错误&#xff0c;其中“ModuleNotFoundError: No module named ‘timm’”就是一个典型的例子。这个错误意味着你的Python环境中没有安…

Web安全:Web体系架构存在的安全问题和解决方案

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…