问题标签 [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.
c++ - UMDF,无法为 Microsoft 定义的类指定 [ClassInstall32] 部分
我正在学习下一个教程:如何编写您的第一个 USB 客户端驱动程序。
而且我在编译项目时遇到了问题,我遇到了下一个错误:
我试图按照教程中的描述执行这些步骤,但在编译项目时总是出现上述错误。
另外,我尝试搜索,但没有找到任何有用的信息。
可能的附加信息,这可能会帮助您给我一条建议:
- INF 文件: http: //pastebin.com/71d6bbQm
- 使用 Windows 10、最新的 WDK 和 VS2015
- 已经开始完全
USB User-Mode Driver
按照教程中提到的模板
kernel - 使用内核模式驱动程序进行远程调试的问题
我在那里使用 windows7 主机我安装了 Vusual Studio 2013 和 WDK 8.1 我还有使用 Virtual Box 的 Windows 10 虚拟机。
我从模板创建新的 KMDF 驱动程序并尝试调试它。
我成功配置了目标机器(与 win10 是虚拟的),驱动程序成功部署,但调试器仍然处于非活动状态。这是来自调试器即时窗口的日志:
在此调试器卡住后,控制台处于非活动状态并显示文本“Debuggee 正在运行...”我没有在 DriverEntry 函数处到达断点,看不到来自内核和驱动程序的任何调试消息。
我还尝试了调试网络设置,但结果相同。
怎么了?
是否存在 VirtualBox 问题?还是因为我尝试在win10上调试win7驱动?
driver - .reload 命令后与目标的连接丢失
在 WinDbg 中:文件->符号文件路径?我将路径设置为:
Srv*c:\symbols*https://msdl.microsoft.com/download/symbols
在此路径文件设置之后,我正在尝试制作此示例:
https ://msdn.microsoft.com/en-us/library/windows/hardware/mt269367
在第 5 节第 2 步中。当我键入.reload /f
调试器失去了与目标的连接。如果我不设置符号文件路径,WinDbg 也会在同一点分解。
对我来说,windbg 似乎失去了与目标的连接并且不再建立它。即使我在 VM 上重新启动目标系统。
有人可以告诉我发生了什么,我做错了什么或为什么会发生这种情况?
我正在使用 VMWare Player。我的主机和目标操作系统是 Windows 10 Pro。VMWare 配置为在 NAT 中使用网络。Echo 驱动安装成功。
在下面,您可以看到 WinDbg 日志:
问候。
c - 链接:错误 LNK2001:未解析的外部符号 NtProcessStartup
我是 Windows 驱动程序开发和微过滤器的新手,我正在尝试使用命令行工具构建nullFilter示例。所以我添加#pragma comment(lib, "FltMgr.lib")
到 .c 文件并成功发出以下命令:
但是,当我尝试创建 sys 文件时:
我正在使用 VS2012 Express 和 WDM8。我的 LIB 环境变量是:
我究竟做错了什么?我错过了什么吗?
windows - 如何注册 acpi 事件通知?(AcpiInterfaces.RegisterForDeviceNotifications)
现在我想在我的 acpi 驱动程序中添加该功能。功能是:获取 BIOS 通知。我搜索一些文档,然后编写代码
CompletionRoutine 返回 STATUS_SUCCESS,但接口仍然是 Empty...
Parameters.QueryInterface.Interface 没有填写...有人可以帮我吗???MSDN 关于 IRP_MN_QUERY_INTERFACE 在此处输入链接描述 在此处 输入图像描述
windows - 如何从我的 Windows 驱动程序代码中区分 devmgmt 的禁用和卸载?
我正在研究来自 WDK7 的 Microsoft Toaster 示例代码,我发现了一个微妙的问题。
现在在 Windows 7 上尝试编译的驱动程序(WDM busenum 和 WDM features1)。
按照自述文件的指导,enum -p 1
添加一个烤面包机设备,然后,我打开设备管理器(devmgmt),找到设备,卸载它。
这将破坏烤面包机的devnode(我相信);我们可以看到ToasterDevice01节点现在从设备管理器中消失了。!devnode 0 1
显示 toaster devnode 仍然存在,State=DeviceNodeUninitialized (0x301),Previous State=DeviceNodeRemoved (0x312)。
然后,我执行enum -p 1
尝试再次添加设备。但我收到错误 0x57(ERROR_INVALID_PARAMETER)。
我调试源代码并找出原因:buspdo.c
没有区分devmgmt的Disable和Uninstall操作。他的代码逻辑是:
- 如果烤面包机被意外移除(
enum -u 1
),它会调用Bus_DestroyPdo()
正确的行为。 - 如果 toaster 从 devmgmt 被禁用,它不会调用,
Bus_DestroyPdo()
这也是正确的。
问题是,当最终用户从 devmgmt 执行卸载时,它遵循禁用路径。现在发生了一些不好的事情:Windows 删除了 toaster devnode,但是 toaster bus driver 不会破坏相应的 PDO,因此,当用户下次执行时enum -p 1
,toaster bus driverBus_PlugInDevice()
会指责 SerialNo==1 的 toaster 设备已经存在,因此失败用户请求。
BTW:Toaster 的 KMDF 版本也有类似的问题(今天只尝试了静态枚举版本)
现在我的问题很清楚了:如何区分禁用和卸载,我应该在总线驱动程序还是子设备驱动程序中进行?也欢迎回答 KMDF 版本。
c++ - 带有 IRP_MJ_WRITE 的 IoBuildAsynchronousFsdRequest
我在磁盘驱动程序上开发了一个 WDM 过滤器驱动程序。我想发送一个异步请求以在磁盘上写入数据。当我删除函数中的writeBuffer
内存时,窗口会崩溃。WriteDataIRPCompletion
我的问题是:如何安全地释放writeBuffer
内存而不会崩溃?
这是我的发送请求代码:
这是我的完成例程代码:
windows - 是否有 Windows 内核 API 可以获取当前 CPU 使用百分比或空闲百分比?
我问这个问题是因为我想从我的内核模式Windows 驱动程序中知道这一点。
我有一些从用户模式移植的库代码,其中有一些附带的压力测试要运行;压力测试代码需要知道 CPU 何时空闲。
简单的谷歌搜索没有显示任何结果,至少从前几页开始。