问题标签 [wdf]

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

windows - Windows WDF 驱动程序电源状态

我正在使用WDF。我正在阅读驱动程序示例,但无法推断以下内容的语义:
- WdfPowerDeviceD0
- WdfPowerDeviceD1
- WdfPowerDeviceD2
- WdfPowerDeviceD3
- WdfPowerDeviceD3Final

将不胜感激有关该主题的任何帮助。

0 投票
1 回答
680 浏览

windows - 如何按需停止即插即用过滤器驱动程序?

我正在开发 Windows 下的过滤器驱动程序。该驱动程序支持 PnP 以接收设备通知,它还创建一个控制设备以通过 IOCTL 与随附的用户模式服务进行通信。

据我了解,驱动程序的生命周期由 PnP 管理器控制。在处理下一个设备通知后,驱动程序将被卸载,因为此时驱动程序没有设备对象。

我需要做的是按需停止驱动程序,而不是在下一个设备到达/离开时停止。到目前为止,我认为这不是它应该工作的方式,另一方面,我没有看到任何禁止按需卸载过滤器驱动程序的逻辑。我研究了发送 STOP 控制,但我看不出如何在 PnP 驱动程序中处理它(仅适用于旧版驱动程序)。

现在我正在考虑添加特殊的 IOCTL 处理程序,这将关闭所有设备对象。但这还不够,司机的生命周期由 PnP 经理管理,所以我需要以某种方式“引起经理的注意”到我的司机身上。任何帮助表示赞赏!

如果您想知道,我需要驱动程序可以停止,以便卸载不需要重新启动。

0 投票
1 回答
156 浏览

windows - 如何预处理缓冲区并通过

如何将请求发送到堆栈中的下一个驱动程序以进一步完成?

在我的过滤器驱动程序中,我使用回调 EvtDeviceIoWrite 为 EventWrite 注册了一个队列,如下所示:

我只想做这样事情,但为了请求。

抱歉,我是内核开发的新手,如果有人能指出实现这一目标的正确方法,那将是非常棒的。任何建议将不胜感激。

0 投票
1 回答
110 浏览

windows - 如何将另一个请求向下传递?

正如标题所示,我在使用以下代码时遇到了问题:

我无法将 newRequest 发送到堆栈中... ret 值为“FALSE”,状态为 STATUS_INVALID_DEVICE_STATE。如何使设备处于正确的状态?

正如链接所示,我做的一切都是正确的。总而言之,我无法将请求发送到本地 IO 堆栈,目标 IO 处于不正确的状态,我不知道如何让它工作?

0 投票
0 回答
362 浏览

windows - 无法在 Windows 7 中为设备设置友好名称

在我的 UMDF 设备驱动程序中,我以编程方式为我的设备设置了一个友好名称:

它适用于 Windows 8 和 10。问题是它不适用于 Windows 7 和 Vista。虽然执行上述代码时我没有收到任何错误,并且显示“设备的友好名称已成功设置”,但设备管理器中的友好名称并没有改变。刷新设备列表后它也不会改变。当我在注册表中查看设备的硬件密钥时,HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_XXXX&PID_XXXX\XXXX缺少“FriendlyName”的值。当我手动添加它时,它会显示在设备管理器中。

0 投票
1 回答
3016 浏览

visual-studio-2017 - 安装 wdk 后 WDF 模板在哪里?

视觉工作室社区 2017 + wdk 10.0.15063.0 + sdk 10.0.15063.137

我先安装了vs2017,然后安装了wdk。但是,当我尝试创建 KMDF 时,我找不到 WDF 模板。

感谢任何帮助。

0 投票
1 回答
848 浏览

driver - 用户模式和内核模式的进程 ID 相同

我很震惊,在我的应用程序通过 DeviceIoControl() Win32 API 向我的内核驱动程序 (WDM) 发出的 IOCTL 请求中,我在用户模式和内核模式之间获得了相同的 PID。

据我所知,驱动程序在内核模式下有自己的PID;应用程序在用户模式下拥有自己的PID,它们是分开的,可以通过IOCTL进行通信。但是今天,我在 IOCTL 请求中的用户/内核模式之间获得了相同的 PID。我GetCurrentProcessId()在用户模式下通过函数获得了 PID;并在内核模式下通过PsGetCurrentProcessId()函数获得PID,在用户模式应用程序中显示结果,这两个PID是相同的。

有谁知道为什么?

0 投票
2 回答
215 浏览

ndis - 如何从 NDIS Miniport 调用 KMDF WDF 接口?

我有一个总线驱动程序,它为自定义以太网卡的每个物理端口创建一个 PDO。我还有一个安装在每个 PDO 上的 NDIS 微型端口驱动程序。

Bus Driver 基于静态 Toaster 示例。NDIS Miniport 基于 Netvmini 修改以匹配硬件。

状态 = WdfDeviceAddQueryInterface(hChild, &qiConfig);

如何从 NDIS 驱动程序调用 KMDF WDF 定义的接口?谢谢

0 投票
1 回答
297 浏览

ndis - 驱动程序枚举了两个返回相同设备 ID 的子 PDO

我有一个 kmdf 总线驱动程序 PCI\VEN_XXXX&DEV_XXXX,它创建两个具有序列号的静态枚举 PDO:217 和 218;每个以太网端口一个。PDO 硬件 ID 是 ROOT\MY_NIC_PORT,因此我可以在它们上安装 NDIS Miniport 驱动程序。

总线驱动通过SDV和Verifier;但是,在重新启动时会枚举另外两个 PDO。在下一次重新启动时,我得到一个重复的 pdo 崩溃。

烤面包机示例使用设备类 guid 作为硬件 ID 的一部分。当我尝试我的 NIC 端口不再出现在设备管理器中时。

任何调试建议或解决想法将不胜感激?

0 投票
0 回答
339 浏览

c++ - WDF PNP 驱动程序不会卸载

我正在编写一个附加到网络摄像头的 WDF 过滤器驱动程序。我的代码在下面链接,虽然它可以工作(大部分情况下),但我遇到的一个问题是,当我解开网络摄像头时,驱动程序保持运行状态并且永远不会关闭。驱动程序注册表显示计数为 0 并且没有活动的枚举键,所以我知道它不再附加到任何东西,但我不确定它为什么不会卸载。有什么帮助吗?