问题标签 [wdm]

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 回答
717 浏览

usb - WDM:给定设备 FDO/PDO 确定它是否是 USB Root Hub

USBPcap 附加为所有根集线器的上层过滤器。它通过为 {36FC9E60-C465-11CF-8056-444553540000} 类添加 UpperFilters 条目来实现。然后在 AddDevice 函数中检索 PDO 并获取硬件 ID 列表。然后检查列表中的 USB\ROOT_HUB 和 USB\ROOT_HUB20 条目。如果它在列表中,则该设备被视为 Root Hub,否则不是。上述函数的源代码可在 github 获得:https ://github.com/desowin/usbpcap/blob/master/USBPcapDriver/USBPcapHelperFunctions.c#L725

此解决方案不适用于 USB 3.0 根集线器。由于 USB 3.0 控制器有许多不同的驱动程序,因此没有标准的 USB\ROOT_HUB30 条目。基本上每个驱动程序都有自己的硬件 ID。我宁愿避免列出所有根集线器的硬件 ID。

我想知道是否有任何方法可以可靠地确定设备是否是根集线器,而不仅仅依赖于硬件 ID。

我考虑过检查设备是否具有 GUID_DEVINTERFACE_USB_HUB 并且其父设备是否具有 GUID_DEVINTERFACE_USB_HOST_CONTROLLER,但我不知道如何(以及是否)可以在 AddDevice 回调中调用的函数内部的内核模式下完成。

0 投票
2 回答
13264 浏览

windows - What is the difference between a WDM driver, a KMDF driver and a UMDF driver?

When creating a Windows Driver project in Visual Studio 2012, you have many different options to choose from.

There's a page on MSDN that helps you with choosing the correct driver model for your device. It however doesn't clearly explain the exact differences between the WDM, KMDF and UMDF driver types, and when to choose which model.

I'm looking for an explanation on the differences between the WDM, KMDF and UMDF driver models, so it's easy for beginning Windows driver developers to choose the correct model.

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 回答
2697 浏览

windows - 为什么我们可以从 DISPATCH LEVEL 或以上的非分页池访问内存

据我所知,如果调度 IRQL 级别,那么您可以从非分页池访问内存。如果我们将尝试从分页池访问内存。只是想知道为什么?

0 投票
2 回答
1753 浏览

windows - 手动安装windows XP驱动

如何手动安装“hello world”驱动程序?我写了一个注册表脚本,这"start"=dword:3意味着服务需要手动启动。

但是我该如何开始和停止呢?我试过sc start <path to .sys file>了,但它说specified service does not exist as an installed service

另外,如果可能,请告诉我注册表项和驱动程序的 .sys 文件之间的映射是如何进行的。我的理解是,对于注册表值,我们提到名称[HKEY_LO.../drivername]这个驱动程序名称在 Windows/system32/drivers/ 目录中搜索。如果在那里找到,则根据其他参数处理该驱动程序。如果我错了,请纠正我。

0 投票
0 回答
1116 浏览

audio - 如何从 WDK 获得的 MSVAD 示例代码创建虚拟音频环回设备?

我要制作一个虚拟音频环回电缆/管道(一个虚拟音频设备)。MSVAD 源代码与 WDK 一起只执行捕获和保存在设备输入端口出现的音频数据,我不知道如何实现 CopyTo 和 CopyFrom 函数来制作一个VALC,这样在VALC(虚拟音频设备)的输入端口上的任何音频都可以在VALC的输出端口上使用(类似于Virtual Audio Cable v4.13)。请帮我编写CopyTo代码和 CopyFrom 功能?我得到了一个音频环回驱动程序的源代码,它的功能与VALC相似/相同。在这里,我正在编写代码的音频循环部分。该代码正在运行,但输出中有音乐的咔嗒声和噼啪声。我期待有关此代码的有价值的建议/代码,还请指定此代码有什么问题?

代码:

提前致谢 :)

0 投票
2 回答
1138 浏览

windows - WinDbg 本身是如何工作的?

我最近开始开发 Windows 驱动程序。我想知道它实际上是如何调试我的驱动程序的。我的设置是 --> Win7 作为主机,XP 作为 VMware 上的来宾,我正在通过串口进行调试。

我做过的研究:

我发现只有这个链接说我在谈论的东西很少。

我已经知道调试器如何在单个操作系统上工作,在这种情况下,调试器也在同一个操作系统上,所以它知道哪个进程正在运行。这是可以理解的。但是在这里,调试器在完全不同的操作系统上,完全不同的环境。我只是说file->open source files,我可以设置断点!!此外,当我加载驱动程序时,它实际上在那里中断。我的意思是为什么../如何?XP的内核如何知道(驱动程序是内核的扩展,至少WDM,不知道WDK)有this驱动程序的源代码?那也超出了它的控制(环境)?我的意思是我可以打开 10 个带有断点的文件,但它工作得很好,我不能失败/欺骗它。

所以我的想法是,每当我们在 Win7 上向 windbg 添加源时,它都会从该源创建二进制文件,并且每当 XP 要加载任何二进制文件时,它都会检查这是否是 windbg 正在等待的二进制文件。上面链接中令人困惑的是,Vikrant 说调试器询问内核(XP)它是否愿意调试一个进程-> Bus HELLO ...进程在 XP 上运行,windbg 在 Win7 上运行并且不知道name or id进程. 它有源代码,但是考虑一个由 300 个文件构建的驱动程序的情况,并且只有一个可能是最简单的文件在 windbg 中打开,它与正在运行的驱动程序的源代码如何匹配?

0 投票
0 回答
44 浏览

windows - I/O Manager 的型号是否从 WinXP 更改为 WinVista+

我正在尝试 WDM、I/O 管理器和类似的东西。我遇到了这个,讲述了 I/O 管理器的运作方式。我想知道

  1. 这也适用于 WDM(XP 时代)吗?FSD 和所有(!!)
  2. 如果没有,我在哪里可以获得当时 I/O 管理器的详细信息?

我对此表示怀疑,因为在阅读时闻起来很像用户模式驱动程序和内核模式驱动程序,我相信它们在 WDM 中不存在。

0 投票
1 回答
1691 浏览

windows - 为什么我们需要为连接到总线的单个设备创建两个设备对象(PDO 和 FDO)?

我是 Windows 的新手,在阅读 WDM 驱动程序时,我遇到了有关设备对象(PDO 和 FDO)的信息。我无法想象为什么我们需要 2 个不同的设备对象,因为在加载驱动程序后为什么我们再次在 ADDDevice 例程中创建 FDO。我们可以在那里使用 PDO,因为它代表相同的设备。

0 投票
0 回答
281 浏览

windows - 对于 wdm 中的烤面包机总线驱动程序(虚拟),如何创建第一个 PDO?

我是 wdm 的新手,所以作为初学者,我从烤面包机样本(虚拟设备)开始。在研究这个过程中,我发现有一个烤面包机设备连接到它的总线(烤面包机总线)并且这个总线(烤面包机总线)连接到根总线......现在作为其连接设备(烤面包机总线)的总线驱动程序,根驱动程序有责任检测设备并创建 PDO,然后 PnP 管理器将通过此 pdo 提取信息,例如 h/w id 等。但是这里因为它是虚拟的,所以我们通过添加新的 h/w 向导提示符来做到这一点,所以在设备安装 我可以在注册表中找到 h/w id 和其他属性,但在设备安装后我无法看到它......相反,我在加载 INF 文件后找到它(手动安装驱动程序)。