问题标签 [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.
device-driver - WinXPe NDIS 5.1 设备驱动程序 IPv6
编写 WinXPe NDIS 5.1 设备驱动程序。从 DDK 的 Intel E100 驱动程序源开始并适应 Altera 三速以太网内核。通过分散收集DMA接收数据包运行良好,可以看到良好的数据。通过单独的分散收集 DMA 传输数据包声称运行良好。问题是 ipconfig 仅显示 NIC 的 IPv6 IP 地址。控制面板、网络配置、Internet 协议,已设置静态 IPv4 IP 地址且没有 DHCP。但是 ipconfig 没有看到它。找不到任何 OID 似乎可以告诉 WinXPe 有关 IPv6 与 IPv4 的任何信息。控制面板,网络配置正确更新以太网连接和断开连接,但似乎没有什么可以取悦 ipconfig。ipconfig 从哪里获取其 IPv6 信息,驱动程序如何影响它?谢谢。
split - 拆分 NDIS_BUFFER (WDK)
我是驱动程序编程的新手,我找不到一个可能很简单的问题的解决方案。我正在编辑 wdk 示例中的 ndis_prot 示例驱动程序。目前,数据包作为 Irp 到达驱动程序并存储到 pNdisBuffer 中。我需要将该缓冲区分成两部分 - pNdisBuffer1 和 pNdisBuffer2 - 首先填充标头,然后填充数据并将它们都链接到 pNdisPacket。关于这方面的文章很少,但我找不到这方面的例子。应该是可能的,就像这里描述的那样
http://blogs.msdn.com/b/ntdebugging/archive/2008/09/19/ndis-part-1.aspx
但我想看看 wdk (代码)中的例子。
PS:请不要问我为什么需要这样做,也不要尝试将其更改为不同的东西。它只需要那样做。你能帮我吗?
windows - 安装 NDIS 轻量级过滤器需要重新启动操作系统
我正在尝试开发一个动态加载 NDIS 6.0 轻量级过滤器并稍后卸载它的工具。我遇到了一个问题。某些系统需要在过滤器安装后重新启动。(INetCfgClassSetup:Install 返回 0x4A020 NETCFG_S_REBOOT)。驱动程序未加载。然而其他系统会立即加载驱动程序,一切正常。轻量级过滤器与 WinDDK 中 src\network\ndis\filter 中的示例几乎相同。我的假设是轻量级过滤器应该加载而不需要重新启动操作系统。这是一个有效的假设吗?如果是,如何对需要重新启动的系统进行故障排除?
wireless - 如何动态禁用 Windows 无线节能?
我们在无线节能方面存在一些问题。如果我们在当前电源计划中将无线适配器设置的省电模式设置为最高性能,所有问题都消失了。但是,这确实会影响电池寿命。所以我们想找到一种方法以编程方式关闭 Wi-Fi 省电,仅在我们的程序运行时。
我们尝试设置 OID_DOT11_POWER_MGMT_REQUEST,但失败并显示 0xC0010017,这意味着 NDIS_STATUS_INVALID_OID。不过查询没问题。
另一种方法是修改当前的电源方案,但是如果用户在我们的程序运行时切换电源方案,可能会导致问题和混乱。
这里的大师知道更好的方法吗?提前致谢。
windows - hr 0x800f0203 没有为设备信息集或元素选择驱动程序
仍在安装我的 LWF 驱动程序。我想我已经接近了,但我遇到了这个错误:
“hr 0x800f0203 没有为设备信息集或元素选择驱动程序。”
我正在使用 SetupCopyOEMInfA 函数验证我正在复制 INF 和必要的组件。之前设备上有一个锁,之后有一个释放,我省略了发布的长度。在 pncClassSetup->Install 函数中引发错误。这可能是因为我的 componentId 是错误的,但在我发现的一个示例中我看到它与 MAX_PATH 进行了比较,所以我认为它是一个 INF 文件。我一直在研究的例子是:
http://www.boudrand.net/index.php?option=com_content&view=article&id=5 http://stackoverflow.com/questions/10308583/programmatically-installing-ndis-filt er-driver
如果有人有任何见解,我将不胜感激!
ioctl - 从用户模式查询 NDIS OID
为 WinXPe 编写 NDIS 5.1 驱动程序。除了正常的 NDIS 发送/接收功能外,驱动程序还需要为用户进程提供一些离散的 IO 值,大概是通过一组自定义 OID。网络上的信息表明 IOCTL_NDISUIO_OPEN_DEVICE 然后 IOCTL_NDISUIO_QUERY_OID_VALUE 将是完美的,但这些功能似乎仅限于 Windows CE 而不是 WinXPe。CreateFile 到“\\.\\NdisUio”成功,但 IOCTL_NDISUIO_OPEN_DEVICE 失败,代码 (50)“不支持请求”。此外,我不得不作弊只是为了让 nuiouser.h 进入我的项目,因为它不适用于常规 SDK。WMI 似乎没有帮助,因为 WMI 似乎只支持“标准”参数,而不支持自定义参数。
如有必要,我相信我可以在我的 NDIS 驱动程序中实现 IoCreateDevice 和 IoCreateSymbolicLink,然后使自定义 IOCTL 可用于用户进程。但如果可能的话,我宁愿走 OID 路线。
WinXPe 用户进程能否执行 NDIS OID 查询?
visual-studio - NDIS 和微型端口驱动程序
我正在尝试使用 Visual Studio 2012 中提供的 WDK 工具修改以太网驱动程序。
WDK 中提供的示例是“微型端口适配器”和“NDIS 轻型过滤器”等。我仍处于编写驱动程序的最开始,因此很难在代码中导航。
在 Visual Studio 2012 中构建微型端口适配器后,我能够安装它[在我的网络适配器列表中显示为“Microsoft 虚拟微型端口适配器”。]我还可以为其分配 IP 地址和子网掩码。[我发现这不会连接到我的 PC 上的任何物理设备]。
我还设置了“调试视图”软件来检查来自我的适配器的驱动程序消息。[我在代码中使用了“DbgPrint”语句然后构建它。]但是,调试消息被重复打印。
1-为什么会一次又一次地打印消息?消息来自程序的“datapath.c”文件,来自函数“MPSendNetBufferLists”。['Net Buffer' 指定在网络上发送或接收的数据。]
2-我设置了 Wireshark 来捕获适配器上的数据,它显示有来自 ARP、HTTP、SSDP、MDNS 等的请求来自它。我无法理解与适配器实际交谈的内容?我怎样才能阻止它说话?
我可以使用“ping”来查看我分配给适配器的 IP 地址上是否存在连接,它会成功响应,告诉所有数据包都已发送并且没有数据包丢失。
我的目标是通过 IP 地址向这个以太网适配器发送和接收“数据”数据包。即-我希望应用程序连接到分配给适配器的 IP 地址并与之交谈。
3- 我真的可以用 WDK 中提供的样本来做吗?
欢迎任何其他建议或意见。
PS-我无法使用 Visual Studio 2012 中内置的 Windows 调试器。我使用了 2 台 PC,能够将驱动程序连接并安装到“目标”PC 上,但无法对断点等进行任何操作。代码和在“目标”PC 上安装驱动程序后,程序什么也没做。对此有什么建议吗?我以为我也可以对驱动程序进行逐步调试。[我知道我错了]。
谢谢阿迪亚
ndis - 是什么导致我的 NDIS 微型端口驱动程序在 XP 操作系统上崩溃
我基于 Windows DDK 的示例“passthru”编写了一个简单的数据包过滤驱动程序,当我打开过滤功能时,操作系统崩溃,我从 WinDbg 收到以下消息:
Microsoft (R) Windows 调试器版本 6.12.0002.633 X86 版权所有 (c) Microsoft Corporation。版权所有。
加载转储文件 [D:\iCheckTool\dump\MEMORY.DMP] 内核摘要转储文件:只有内核地址空间可用
警告:路径元素开头的空格符号搜索路径为:D:\iCheckTool\dump;SRV*E:\DebuggingSymbols*http://msdl.microsoft.com/download/symbols;SRV*C:\MyLocalSymbols*http://192.168.20.25/zfprisymbols/ 可执行搜索路径为:Windows XP Kernel Version 2600 (Service包 3) MP (2 procs) 免费 x86 兼容产品:WinNt,套件:TerminalServer SingleUserTS 构建者:2600.xpsp_sp3_qfe.120504-1617 机器名称:内核基础 = 0x804d8000 PsLoadedModuleList = 0x8055e720 调试会话时间:9 月 11 日星期二 09:41: 2012 年 2 月 828 日(UTC + 8:00)系统正常运行时间:0 天 0:02:30.578 加载内核符号 .................... ...................................................... .............................. 加载用户符号 PEB被调出 (Peb.Ldr = 7ffd800c)。键入“.hh dbgerr001”
- *
- 错误检查分析 *
- *
使用 !analyze -v 获取详细的调试信息。
错误检查 C5、{4、2、1、8054c10f}
可能是由于:Pool_Corruption (nt!ExDeferredFreePool+109)
跟进:池腐败
1:kd>!分析-v
- *
- 错误检查分析 *
- *
DRIVER_CORRUPTED_EXPOOL (c5) 试图以过高的中断请求级别 (IRQL) 访问可分页(或完全无效)地址。这是由损坏系统池的驱动程序引起的。针对任何新的(或可疑的)驱动程序运行驱动程序验证程序,如果没有发现罪魁祸首,则使用 gflags 启用特殊池。参数: Arg1:00000004,内存引用 Arg2:00000002,IRQL Arg3:00000001,值 0 = 读取操作,1 = 写入操作 Arg4:8054c10f,引用内存的地址
调试细节:
BUGCHECK_STR:0xC5_2
当前_IRQL:2
FAULTING_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebxDEFAULT_BUCKET_ID:DRIVER_FAULT
PROCESS_NAME:explorer.exe
trap_frame:b42555dc - (.trap 0xfffffffffb425555dc)errcode = 00000002 eax = 89cc1c60 ebx = 89e4ded8 ecx = 000001ff edx = 89cc2a78 esi = 80565d20 edi = 00000000 EIP = 8054C10F ESP = B4255650 EBP = B4255650 EI NZ = 0 NV UP EI NZ AC PE cy cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010297 nt!ExDeferredFreePool+0x109: 8054c10f 895f04 mov dword ptr [edi+4],ebx ds:0023:00000004=??? ???重置默认范围
LOCK_ADDRESS: 8055c4e0 -- (!locks 8055c4e0)
资源@nt!PiEngineLock (0x8055c4e0) 可用争用计数 = 1 1 总锁
PNP_TRIAGE:锁定地址:0x8055c4e0 线程数:0 线程地址:0x00000000 线程等待:0x0
LAST_CONTROL_TRANSFER:从 8054c10f 到 80545768
STACK_TEXT:!!!!!b42555dc 8054c10f badb0d00 89cc2a78 b8338538 NT KiTrap0E + 0x238 b4255690 8054c75f 00000001 8055c100 00020019 NT ExDeferredFreePool + 0x109 b42556d0 8058635e 899522e8 00000000 b42557d8新台币ExFreePoolWithTag + 0x47f b42556fc 805878b8 c0000023 00000007 8058758c NT PiGetDeviceRegistryProperty +量0x108 b425578c bf879f40 8a523030 00000001 00000100 NT IoGetDeviceProperty + 0x25e b42558f8 bf879735 00000000 e1b5e008 00000000 WIN32K DrvEnumDisplayDevices + 0x33b b425591c 8054268c 00000000 00000000 0007ecc4 WIN32K NtUserEnumDisplayDevices + 0x7c b425591c 7c92e514 00000000 00000000 0007ecc4 NT KiFastCallEntry + 0xFC有警告:!!!IP帧中没有任何已知的模块。以下框架可能是错误的。0007f010 00000000 00000000 00000000 00000000 0x7c92e514
堆栈命令:kb
FOLLOWUP_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebxSYMBOL_STACK_INDEX:1
SYMBOL_NAME: nt!ExDeferredFreePool+109
FOLLOWUP_NAME:池腐败
IMAGE_NAME:Pool_Corruption
DEBUG_FLR_IMAGE_TIMESTAMP:0
MODULE_NAME:Pool_Corruption
FAILURE_BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109
BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109
跟进:池腐败
谁能告诉我是什么导致了这个问题以及如何解决它?谢谢。
windows-7 - 在 WinXP/7 上与 NDIS 通信
有设备通过 1Gbit 以太网连接到 PC。WinXP/7 我想通过以下方式捕获数据:
- PC 向设备发送命令(启动数据采集)
- 设备正在向 PC 发送数据
- 用户应用程序等待获取
- 驱动程序将数据保存在内存中
- 设备发送命令通知已完成采集
- 驱动程序产生中断,用户应用程序开始从驱动程序读取数据
我不知道如何实现。有网卡驱动。有 NDIS。用户应用程序可以与 NDIS 通信吗?我需要编写额外的驱动程序来与 NDIS 通信吗?
linux - linux中NDIS过滤器的类似物是什么?
我正在as close to real-time
尽可能在 linux 上开发一个系统,一旦我收到一个特定的数据包,就需要在 TCP 数据包中发送大约 600-800 个字节。
为了获得尽可能好的延迟,我希望这个数据包直接从内核发送,而不是接收到的数据包一直到达用户空间和应用程序,然后返回。
如果我在 Windows 上,我会编写一个 NDIS 过滤器,我将缓存要发送的数据包和匹配的参数,以便它检查接收到的数据包并在匹配时将预缓存的数据包触发到网络上而不通过接收到的数据包向上层。
所以我的问题是 linux 上最接近 NDIS 过滤器的类似物是什么?
我已经阅读了有关 netfilter 的内容,也许这就是我会使用的,但我不知道这是否是最好的方法。
我还能做些什么来实现尽可能低的延迟?
我当前的纯用户空间代码在 Intel Xeon 3.7 GHz 处理器上运行 2.6.3x 内核上的 Ubuntu 10.04 给了我大约 80-100 微秒。