NDIS 和微型端口驱动程序

2024-01-02

我正在尝试使用 Visual Studio 2012 中提供的 WDK 工具修改以太网驱动程序。

WDK 中提供的示例包括“微型端口适配器”和“NDIS 轻量级过滤器”等。我仍处于驱动程序编写的最初阶段,因此发现很难浏览代码。

在 Visual Studio 2012 中构建微型端口适配器后,我能够安装它[在我的网络适配器列表中显示为“Microsoft 虚拟微型端口适配器”。]我还可以为其分配 IP 地址和子网掩码。[我发现这不会连接到我的电脑上的任何物理设备]。

我还设置了“调试视图”软件来检查来自适配器的驱动程序消息。[我在代码中使用了“DbgPrint”语句,然后构建了它。]但是,调试消息会重复打印。

1- 为什么消息会反复打印?这些消息来自程序的“datapath.c”文件和函数“MPSendNetBufferLists”。 [“网络缓冲区”指定在网络上发送或接收的数据。]

2-我设置 Wireshark 来捕获适配器上的数据,它显示有来自 ARP、HTTP、SSDP、MDNS 等的请求。我无法理解实际与适配器对话的内容是什么?我怎样才能阻止它说话?

我可以使用“ping”来查看我分配给适配器的 IP 地址上是否存在连接,并且它会成功响应,告知所有数据包均已发送且没有数据包丢失。

我的目标是通过 IP 地址向该以太网适配器发送和接收“数据”包。即-我希望应用程序连接到分配给适配器的 IP 地址并与其通信。

3- 我真的可以使用 WDK 中提供的示例来做到这一点吗?

欢迎任何其他建议或意见。

PS-我无法使用 Visual Studio 2012 中内置的 Windows 调试器。我使用了 2 台 PC,并且能够将驱动程序连接并安装到“目标”PC 上,但无法使用断点等执行任何操作。代码和在“目标”PC 上安装驱动程序后,程序什么也没做。对此有什么建议吗?我以为我也可以对驱动程序进行逐步调试。[我知道我错了]。

谢谢 阿迪亚


NDIS 微型端口驱动程序与许多低级驱动程序一样,旨在与硬件通信。微型端口的职责是从操作系统获取发送数据包,将它们转换为硬件所需的任何格式,并指示硬件在线发送数据包。

WDK 可以(事实上,曾经)包含一个在真实硬件上发送数据包的真实示例驱动程序。但这会导致一些混乱,因为现实世界的驱动程序必须处理许多特定于硬件的细节,这些细节会分散示例的要点。如果您从现实世界的驱动程序开始,您要做的第一件事就是识别所有特定于硬件的位并将其删除,以便您可以用您自己的特定于硬件的位替换它们。

相反,WDK 中的“netvmini”示例是一个假驱动程序。这意味着它假装拥有实际的硬件,但实际上这都是谎言。当操作系统将数据包发送到 netvmini 时,netvmini 驱动程序将简单地将这些数据包广播到该计算机上安装的任何其他 netvmini 微型端口适配器。 (实际上,在同一台计算机上安装 2 个 netvmini 适配器模拟了将两个真实适配器插入同一个以太网集线器时会发生的情况。)因此,在 ASCII-art 中,如果您在同一系统上安装两个 netvmini 适配器,就会发生这种情况:

       TCPIP                       TCPIP                      TCPIP
         |                           |                          |
Real physical miniport        Your netvmini #1           Your netvmini #2
         |                           \                          /
   [The Internet]                     [The netvmini virtual hub]

正如 ASCII 艺术所示,您的 netvmini 适配器没有任何通往 Internet 的路径。因此,在您添加硬件详细信息之前,您的驱动程序不会获得可以路由到 Internet 的“真实”IP 地址。在那之前,Windows 将继续尝试发送 ARP 和 HTTP 请求,而这些请求永远不会到达任何地方。

回答您的具体问题:

  1. 每次操作系统尝试发送数据包时,都会打印来自 MPSendNetBufferLists 的消息。因为操作系统认为您拥有真正的网络连接,所以操作系统将多次尝试使用它。最终,当一切都得出结论:这不是一个有用的链接时,这种情况应该会平静下来。

  2. 请求来自 TCPIP。如果您不希望 TCPIP 发送数据,则将其与适配器解除绑定。

  3. 您绝对可以将数据发送到适配器。事实上,您已经观察到您已经在发送随机 HTTP 数据包等。但数据实际上不会到达互联网,除非您教驱动程序如何与您的真实硬件对话。

如果您坐在那里思考“但我没有硬件!”,那么您可能想要创建某种类型的虚拟微型端口。虚拟微型端口类似于 netvmini,因为它们没有真正的硬件,但它们仍然有某种方法将数据包从计算机中取出。例如,在第 2 层(如 L2TP)运行的 VPN 微型端口通常会安装第二个驱动程序(NDIS 协议驱动程序),用于从“真实”物理微型端口发送和接收数据。然后,每当虚拟微型端口需要从机器上获取数据包时,就会与其协议进行对话。结果是:

        TCPIP
          |
  Your virtual miniport
          |
   Your NDIS protocol
          |
The real physical miniport
          |
     The Internet

有替代架构;例如,在第 4 层运行的 VPN(如 SSTP)可能决定打开 WSK 套接字而不是实现 NDIS 协议驱动程序:

        TCPIP
          |
  Your virtual miniport
          |
      WSK socket
          |
        TCPIP
          |
The real physical miniport
          |
     The Internet
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NDIS 和微型端口驱动程序 的相关文章

  • 使用VB.NET查找当前登录用户的用户名

    我正在尝试获取当前用户的用户名 当我登录时Johnny Smith并在没有管理员权限的情况下运行我的应用程序 它将返回正确的用户名 Johnny Smith 但问题是 当我右键单击并选择 以管理员身份运行 时 Windows 将提示我管理员
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 为什么代码分析不警告 NotImplementedException?

    我非常确定 Visual Studio Code Analysis 的早期版本会警告有关 NotImplementedException 的使用 即包含此异常的任何成员 throw new NotImplementedException 会
  • 将现有表单添加到 C++/CLI WinForms 项目

    我在不同的解决方案中有两个 C CLI 项目 A 和 B 我使用 A 进行实验 测试 并在完成测试后将测试的代码移至 B 但是 我发现在将 Windows 窗体类 标头 cpp 和 resx 添加到项目 B 时 我无法再使用 IDE 的可视
  • 发送WM_SETTEXT时如何避免EN_CHANGE通知?

    我有一个 CEdit 派生控件 当基本数据为空时 该控件显示字符串 N A 我最近添加了代码 以在控件获得焦点时清空控件 SetWindowText 并在用户离开焦点时将其设置回 N A SetWindowText N A 控空 唯一的问题
  • 引用 dll 路径的区域内的此注释的目的是什么? (系统.操作)

    如果我浏览到 VS 中 System Action 的定义 region Assembly mscorlib dll v2 0 50727 C Windows Microsoft NET Framework v2 0 50727 mscor
  • VB SQL 语句未选择正确的行

    我试图使用 SELECT 语句在我的数据库中 选择 一个人 但它没有选择正确的人 我也不确定为什么 我正在使用访问数据库 数据库连接代码 Imports System Data OleDb Module Database Connectio
  • 未定义条件编译符号

    我无法让 Visual Studio 按照我的预期运行 我创建了 2 个配置文件 一个定义了符号 FOO 另一个定义了符号 BAR 我有这个代码 static class MyClass if FOO public static strin
  • 构建成功时,Intellisense 不断显示错误 Visual Studio 2015

    因此 我正在开发一个 Xamarin 项目 突然 Visual studio 2015 开始崩溃 它几乎在所有内容下都显示错误红线 例如 InitializeComponent 在每个页面中都有红线 项目构建和运行没有错误 错误仅来自 In
  • 关闭文件后未保存展开/折叠状态

    在 Visual Studio 中 您可以在不使用区域的情况下展开和折叠代码 例如在代码隐藏页面中您可以折叠方法等 而在 ASPX 页面中您可以折叠标签 标签等 当您的页面很长并且您希望将开发重点放在特定部分时 它非常有用 它的一个很酷的地
  • 如何在SSRS VS2008中为多个数据集应用父组

    我已经与这个问题斗争了好几天 但没有成功 我需要实现一种非常棘手的报告格式 但最主要的是所有数据集都需要按 1 个父级进行分组 我将尝试解释 假设我们有数据集1 数据集2 两者都有 AccountNumber 作为公共字段 父级 我需要在报
  • VS 13/VS 15 - 无法导入 SQL 片段

    我想在中创建 SQL 片段VS2013 and VS2015 我不知道为什么 但我在导入时遇到错误 在两个 VS 中 C sql snippet Missing or unspecified Language attribute 我的片段
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 如何在 C# 中向类、方法、属性等添加文档工具提示?

    不确定我的说法是否正确 但我想开始向我的类 方法 属性等添加一些文档 我know这可能是非常明显的 但我从未真正学会过 我不知道从哪里开始 只是为了澄清 每当您滚动某个类 或方法 属性等 时 它都会在 Visual Studio 中显示一个
  • 如果将摘要添加为参考,则摘要不会显示在程序集中

    我用 C 创建了一个 类库 其中包含许多带有摘要的函数 XML 文档注释 例如
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 通过本地项目引用导入 NuGet 引用

    假设我有一个 主 C 项目 它使用 NuGet 来管理其第三方依赖项 现在假设我在主项目旁边创建一个单元测试项目 其中包含主项目作为参考 不幸的是 我似乎需要重新添加通过主项目中的 nuget 包含的依赖项 以便使用它们为单元测试项目中的单
  • 无法在 Visual Studio 2010 (F5) 上启动调试器但是,“附加到进程”确实有效(速度慢)。怎么修?

    环境 全新 全新 安装 Windows 7 64 位 全新 新 安装 Visual Studio 2010 Professional 10 0 30319 1 Windows 更新已是最新的 问题 我无法在 Visual Studio 20
  • Visual Studio 2017 Professional-无法在源代码中找到包

    我试图通过 nuget 包管理器 gt 包管理器控制台以及直接从解决方案管理 Nuget 包来添加包 我正在尝试安装Newtonsoft Json从包管理器这样Install Package Newtonsoft Json但无法从源头找到

随机推荐

  • prettier 配置错误,prettier 不起作用

    我在更漂亮时遇到了错误 怎么解决这个问题 https i stack imgur com gTMp9 png 看起来 无论出于何种原因 在它要查找的位置 即根文件夹 中都没有 Prettier 的配置文件 我会检查是否 prettierrc
  • 适用于 iPhoneSDK 的 Bing 地图

    有谁知道如何使用 bing 地图创建简单的 iPhone 应用程序 Bing Mobile Bing Maps 团队于 2011 年 5 月上旬发布了适用于 iPhone 和 iPad 的新 Bing Maps iOS SDK 您可以下载该
  • asp.net MVC 解决方案/项目布局 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这更多的是一个开放性问题 而不是寻找一个具体的答案 众所周知 没有一个答案适合所有解决方案 但我很想知道您如何构建 ASP NET MVC 解决
  • 有没有办法使用 JavaScript 引入 Internet Explorer 条件注释?

    我有一段 HTML 代码 其中包含条件注释 该代码经过测试 在初始页面呈现时包含在页面的 HEAD 部分中时可以正常工作 我想在 Ajax 响应中使用 JavaScript 将相同的条件 CSS 引入到现有页面 我努力了 var comme
  • Databricks 仅打印大约 280 行数据

    我正在 Databricks 中运行一些大型作业 目前包括盘点数据湖 我正在尝试打印前缀 子文件夹 内的所有 blob 名称 这些子文件夹中有很多文件 我打印了大约 280 行文件名 但随后我看到了以下内容 WARNING skipped
  • PHP 还是普通 Perl CGI 更快?

    我正在为 Apache 共享托管服务器开发一个 Web 应用程序 我已经用 Perl 编写了一些代码 但最近令我惊讶的是 我发现共享托管提供商没有提供 mod perl 或安装它的方法 我一直有点担心在没有 mod perl 的情况下通过
  • py.test 将消息和测试结果/断言记录到单个文件中

    我现在开始使用 py test 来开发一个新项目 我们正在配置 Linux 服务器 我需要编写一个脚本来检查这些服务器的设置和配置 我认为 py test 是实现这些测试的好方法 并且到目前为止它运行得很好 我现在面临的问题是 我需要在这些
  • 为什么保存到名为 temp 的文件夹会导致 Matlab 中 for 循环中的数据加载速度变慢?

    重要更新 我刚刚发现 重新启动 Matlab 和计算机后 这个简化的代码也不再为我重现问题 我很抱歉占用您的时间在一个不起作用的脚本上 但是 如果我在内部 for 循环中的任何文件夹 我已经尝试过 中保存任何内容 老问题仍然存在于我的原始脚
  • 返回时重新加载 UITableView?

    我有顶级水平UIViewController其中包含一个UITableView 顶层UIViewController实例化一个NavigationController 并推动另一个UIViewController到NavigationCon
  • 识别上下文菜单中选择的视图 (Android)

    在安卓中 onContextItemSelected有一个MenuItem参数 因此不清楚如何识别所选视图 MenuItem getMenuInfo http developer android com reference android
  • pip:强制安装忽略依赖项

    有没有办法强制安装 pip python 包 忽略所有无法满足的依赖项 我不在乎这样做有多么 错误 我只是需要这样做 抛开任何逻辑和推理 点有一个 no dependencies转变 你应该使用它 欲了解更多信息 请运行pip instal
  • 如何在android中的videoview中播放.mp4视频?

    我正在开发视频播放器应用程序 我想播放 mp4本机视频视图中的视频 我无法使用 URL 播放视频 我收到错误 抱歉 这部影片无法播放 而且我也无法在本机视频视图中播放下载的视频 我在视频视图中播放视频的代码 String mUrl http
  • 检测视频是否应用了“faststart”

    在 MP4 上运行 qt faststart 时 您实际上是从后面获取元数据并将其放在文件的前面 就我而言 Flash 可以在视频完全加载之前正确开始播放视频 我有大量视频 我正在通过 shell 脚本运行并连夜进行编码 然而 当我上传时
  • 创建日历以在 Jasper 服务器中选择日期(和时间)

    在此输入图像描述 https i stack imgur com w0sgy png jtsnr 来自 jasper 服务器的快照 我在文本框 Dateto 外部单击 然后显示日历 但如前面的示例所示 框外没有日历图标 此外 文本框接受输入
  • unity 2D 玩家运动参数不存在

    我已经成功制作了一个自上而下的射击游戏 现在我正在研究动画 我已经遵循了 Pixelnest io 的几个教程 但奇怪的是 我收到一个错误 说 参数 moveRight 不存在 unity 中的动画对我来说是全新的 并且一直在尝试尽可能多地
  • NestedScrollview 中的 RecyclerView 替代品

    我有一个具有此层次结构的布局 有时我需要更新我的 recyclerview 元素 但它冻结了主线程 我猜是因为滚动视图需要再次测量它 我真的很想知道我应该怎么做 用layoutinflater 替换recyclerview Recycler
  • 从ios本机代码访问AsyncStorage中存储的数据(目标c)

    我需要从 iOS 本机 Objective C 代码访问存储在 AsyncStorage 中的数据 这是需要同步数据的 而不是将 App 事件发送到 JS 然后将其发送回本机代码 我刚刚遇到了同样的问题 我的解决方案是将代码移至本机侧 On
  • 为什么不按照词法封闭的“define”来实现“let”?

    我已经使用 lisp 家族语言工作了好几年 感觉我对它们有了很好的掌握 我现在正在编写自己的 lisp 当然 这是一种时尚 但几乎完全避免重新实现 Scheme Common Lisp 和朋友使用过的相同模式 我总是觉得奇怪的一件事是所有的
  • 来自数据库的 之间的 PHP eval() 代码

    我希望能够将 PHP 放入数据库并运行它 我必须这样做 因为我将页面布局存储在数据库中 并且每个页面布局彼此不同 但是在某些情况下 我想对某些页面使用动态内容 Assume query from db是从数据库返回的字符串 PHP 应该只
  • NDIS 和微型端口驱动程序

    我正在尝试使用 Visual Studio 2012 中提供的 WDK 工具修改以太网驱动程序 WDK 中提供的示例包括 微型端口适配器 和 NDIS 轻量级过滤器 等 我仍处于驱动程序编写的最初阶段 因此发现很难浏览代码 在 Visual