问题标签 [ndis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1337 浏览

windows - Windows NDIS 驱动程序:单个设备上的并发读/写 (IRP_MJ_READ/WRITE)

从 Microsoft 的 ndisprot 示例开始,我尝试编写 NDIS 协议驱动程序。从用户空间我尝试同时读取和写入设备(在两个线程中)。由于我没有收到任何数据包,因此 ReadFile 系统调用会阻塞。在这种状态下,我无法完成 WriteFile 系统调用。

我添加了一些调试消息,发现与 IRP_MJ_WRITE (NdisprotWrite) 关联的驱动程序函数甚至没有被调用!用户空间应用程序和驱动程序之间的某些东西阻止了对设备 \Device\NDISprot 的并发访问。

如何同时读取和写入文件?

0 投票
1 回答
383 浏览

multithreading - 驱动程序中的线程不发送数据包

我有这个 NDIS 过滤器驱动程序。我尝试在我的驱动程序中启动一个线程,该线程将每 10 秒发送一次数据包。

为此,我使用以下代码:

该函数以PsCreateSystemThreadin开头DriverEntry
但这不是发送我的数据包。
我尝试使用这个:

此代码不停地发送我的数据包。

以下代码每 10 秒用我的数据包创建一个新文件(CreateFileS 是我的函数),但不发送我的数据包

为什么会发生这种情况,我该怎么做才能每 10 秒发送一次数据包?

0 投票
2 回答
3630 浏览

c++ - NDIS版本与Windows版本的兼容性问题

每个人。我正在对数据包捕获库 WinPcap 进行一些修改。我的老板要我把 WinPcap 的 NDIS 版本从 NDIS 4 转移到 NDIS 6。兼容性要求是 Windows XP/Vista/7/8(32 位和 64 位)。我发现NDIS的最新版本是6.3,但是我怕NDIS 6.3已经不支持XP了,这是真的吗?我还在 WinPcap 网站上发现当前的 WinPcap 4.1.3 已经支持 Windows XP/2003/Vista/2008/Win7/2008R2/Win8(x86 和 x64)。这样对吗?我应该更新哪个版本的 NDIS 以保持最广泛的兼容性?

0 投票
1 回答
992 浏览

windows - 如何调用 NdisOpenAdapterEx 或 ProtocolBindAdapter 例程之外的替代方法?

我正在将著名的数据包捕获软件——WinPcap 从 NDIS 5.0 移植到 NDIS 6.x。我尝试将每个 NDIS 5.0 功能转换为 6.0 版本。在 WinPcap 源代码中,函数 NdisOpenAdapter 由 Openclos.c 中的 NPF_OpenAdapter 调用。我将它翻译为 NDIS 6.0 的 NdisOpenAdapterEx。但我找不到设置第 4 个参数 BindContext 的方法。NdisOpenAdapterEx 的声明可以在这里找到:http: //msdn.microsoft.com/en-us/library/windows/hardware/ff563715 (v=vs.85).aspx

MS 还说“协议驱动程序必须从其 ProtocolBindAdapterEx 函数调用 NdisOpenAdapterEx。NDIS 无法在 ProtocolBindAdapterEx 的上下文之外调用 NdisOpenAdapterEx。”。所以在 NPF_OpenAdapter 中似乎无法调用 NdisOpenAdapterEx。它必须在 NPF_BindAdapterEx 函数中调用。我用我自己的版本替换了驱动程序 npf.sys,启动了 Wireshark(一个数据包捕获前端),在 NPF_BindAdapterEx 中设置断点,发现在 NPF_OpenAdapter 之前从未调用过 NPF_BindAdapterEx。所以我不可能在调用 NdisOpenAdapterEx 之前获取 BindContext 参数。

我只想通过尽可能小的修改将 WinPcap 移植到 NDIS 6.0。以及如何解决这个问题?</p>

这是 Openclos.c 的代码

0 投票
1 回答
2417 浏览

windows - NDIS 协议驱动程序(WinPcap 的 npf.sys)能否移植到 LWF 或 WFP?

每个人。我正在为 WinPcap 做一些改进。现在我已将 npf.sys 驱动程序从 NDIS5.0 移植到 NDIS6.0。这个驱动是否还有改进的空间,比如移植到 LWF(Light-Weight Filter)或 WFP(Windows Filter Platform)?我们只是想确保使用更新更好的框架。

这里还有一些其他问题:

好像LWF是Vista时代的产品,现在微软很少提及,是真的吗?

LWF 或 WFP 驱动程序可以做 NDIS 协议驱动程序可以做的事情吗?

LWF 或 WFP 是否与 WDF(Windows 驱动程序框架)有关,或者与 WDF 和 WDM 框架兼容?

如果移植可行,难度如何,我之前开发了一些 NDIS 中级驱动程序,LWF 或 WFP 比那更难还是更容易?

谢谢!

0 投票
1 回答
1401 浏览

visual-studio - 使用 Visual Studio 2012 编译 NDIS 驱动程序时出错!:(

我正在尝试使用 Visual Studio 2012 Express for Desktop 编译 NDIS 驱动程序。我已经安装了 WDK 8.1 但仍然无法获得它...

我怀疑在某个地方我必须包含 MSbuild 工具的路径,但不幸的是我没有理想的方法。

这是错误消息:

错误 MSB8020:找不到 WindowsKernelModeDriver8.1 的构建工具(平台工具集 = 'WindowsKernelModeDriver8.1')。要使用 WindowsKernelModeDriver8.1 构建工具进行构建,请单击“项目”菜单或右键单击解决方案,然后选择“更新 VC++ 项目...”。安装 WindowsKernelModeDriver8.1 以使用 WindowsKernelModeDriver8.1 构建工具进行构建。C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets 44 5 ndisprot630

0 投票
2 回答
796 浏览

c - 是否可以在 NDIS 层捕获 localhost 数据包(127.0.0.1 作为目标)?

我正在为 WinPcap 和 Nmap 开发 Win7 和 Win8 的 NDIS 6 过滤器驱动程序。如您所知,Nmap 是一个网络扫描仪。Nmap 的一个要求是捕获 localhost 数据包,例如“ping 127.0.0.1”,以便 Nmap 也可以测试本地机器本身。但是,似乎 localhost 数据包只会在 TCP/IP 堆栈中返回,而永远不会到达 NDIS 层。有没有办法解决这个问题?就像添加一个环回适配器或什么?谢谢。

0 投票
1 回答
614 浏览

c - NDIS 过滤器使用 NdisFSendNetBufferLists 是否必须使用 FilterSendNetBufferLists 处理程序?

大家,我正在将 WinPcap 从 NDIS6 协议移植到 NDIS6 过滤器。快结束了,但我还有一些问题:

ndislwf 的评论说“不提供 FilerSendNetBufferList 处理程序的过滤器不能自行发起发送。” 这是否意味着如果我使用 NdisFSendNetBufferLists 函数,我必须提供 FilerSendNetBufferList 处理程序?我的驱动会通过 NdisFSendNetBufferLists 发送自建数据包,但我不想过滤其他程序发送的数据包。

与 FilterReturnNetBufferLists 相同,它表示“不提供 FilterReturnNetBufferLists 处理程序的过滤器不能自行发起接收指示。”。“发起接收指示”是什么意思?NdisFIndicateReceiveNetBufferLists 或 NdisFReturnNetBufferLists 或两者兼而有之?另外,对于我的驱动程序,我只想捕获接收到的数据包而不是返回的数据包。因此,如果可能的话,我不想出于性能目的提供 FilterReturnNetBufferLists 函数。

另一个类似的情况是FilterOidRequestComplete和NdisFOidRequest,实际上我的过滤驱动只想通过NdisFOidRequest自己发送Oid请求,而不是过滤其他人发送的Oid请求。我可以将 FilterOidRequest、FilterCancelOidRequest 和 FilterOidRequestComplete 保留为 NULL 吗?或者哪一个是必须使用 NdisFOidRequest 的?

谢谢。

0 投票
1 回答
968 浏览

c - 为什么不调用我的 NDIS 过滤器驱动程序的 FilterReceiveNetBufferLists 处理程序?

每个人。又是我,将 WinPcap 从 NDIS 6 协议移植到 NDIS 6 过滤器的人:) 我遇到了一个错误,让我困了两天。这里是:我安装好npf6x.sys驱动(原名为npf.sys)后,可以通过“net start npf”启动服务。然后我打开了 Wireshark。然后网络出现故障(托盘图标上的感叹号)。经过远程调试,我发现 FilterReceiveNetBufferLists 例程从未被调用过。我相信 RX 链接在这里被破坏了。但是,FilterSendNetBufferLists 被正常调用。我确定 FilterAttach 已成功调用,现在没有调用 FilterUnload。所以过滤器模块应该还在它的位置。但它不能在 RX 路径中工作。然后我点击了Wireshark的“开始”按钮,竟然发现网络已经恢复了。然后我停止当前捕获并单击“接口列表”,网络再次关闭。太奇怪了。

我没有在驱动程序的运行过程中更改处理程序指针。我似乎驱动程序也没有被锁阻塞。谁能告诉我是否有任何情况导致 NDIS 在运行期间不调用过滤器的 FilterReceiveNetBufferLists?

还有任何官方文档说明如何从 NDIS 6 协议移植到 NDIS 6 过滤器?我只找到了从 NDIS 5 移植到 NDIS 6 的文档。

谢谢。

0 投票
1 回答
1650 浏览

c - 未调用 NDIS 筛选器驱动程序的 FilterReceiveNetBufferLists 处理程序

我正在开发一个 NDIS 过滤器驱动程序,我发现它FilterReceiveNetBufferLists在某些条件下(如打开 Wireshark 或单击它的“接口列表”按钮)从未被调用(网络被阻塞)。但是当我开始捕获时,FilterReceiveNetBufferLists得到正常(网络恢复),这太奇怪了。

我发现当我手动返回WinPcap 驱动程序的 OID 起源位置(NPF_IoControl 的 BIOCQUERYOID 和 BIOCSETOID 开关分支)中NDIS_STATUS_FAILURENdisFOidRequest函数时,驱动程序不会阻塞网络(winpcap 也无法工作)。

NdisFOidRequest通话有问题吗?

Packet.c 中发起 OID 请求的 DeviceIO 例程:

三个过滤器 OID 例程: