问题标签 [kmdf]

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

wdk - IoGetDevicePropertyData() 返回 STATUS_OBJECT_NAME_NOT_FOUND

我正在为 PCI 设备更新功能正常的 KMDF 驱动程序,使用 WinDDK 7600.16385.1 和 OSR 的 ddkbuild.cmd,针对 WLH,在 Win7 x86 和 x64 上进行测试。

我正在尝试检索 DEVPKEY_Device_LocationPaths 属性。

设备管理器设备属性详细信息选项卡在“位置路径”中显示预期值...

...但是从 EvtDriverDeviceAdd 处理程序调用 IoGetDevicePropertyData() ...

... 总是返回 STATUS_OBJECT_NAME_NOT_FOUND。

我努力了 ...

  • 为其他 DEVPKEY_Device_* 值调用 IoGetDevicePropertyData()。结果是一样的。

  • 在 EvtDevicePrepareHardware 处理程序中调用 IoGetDevicePropertyData()。结果是一样的。

  • 调用 WdfDeviceWdmGetPhysicalDevice() 来检索 PDO。结果是一样的

  • WdfDeviceAllocAndQueryProperty()。它工作正常,但不提供我需要的信息。

  • WdfFdoQueryForInterface(GUID_PNP_LOCATION_INTERFACE)。它工作正常但只提供当前节点(即“PCI(0400)”)

  • 搜索调用 IoGetDevicePropertyData 的示例代码。我找到了 Windows CDROM 存储类驱动程序示例,但它似乎没有做任何我还没有尝试过的事情。

所以......我错过了什么?

0 投票
1 回答
106 浏览

serial-port - Windows 7 上的前面板驱动程序使用了第三方驱动程序

我们已经有一个基于 uart 通信的前面板,我想用它来与 windows pc 通信。解决方案是使用芯片隐蔽的UART转USB,windows上的芯片驱动是virutal COM,驱动显示在设备管理器中,并从前面板接收信息,但它不是开源的。我想知道如何开发 KMDF/UMDF 驱动程序来读取/写入虚拟 COM 驱动程序以将 KEY 信息发送到 Windows 系统,或者让 Windows 系统识别这是密钥信息。

请给我一些示例代码、链接、文件或建议,非常感谢。

0 投票
2 回答
2407 浏览

deployment - 部署 kmdf 驱动程序的问题

我一直在尝试使用 Visual Studio 2012 工具编译和部署 Microsoft 提供的示例键盘过滤器。我通过串行电缆设置了目标计算机(带有串行电缆的虚拟盒似乎正在工作,因为设置过程设法在目标计算机上安装了所有东西)。

示例代码编译得很好,但是当我尝试部署它时,它首先告诉我它正在部署,需要一段时间,然后声明它失败并出现以下错误:

错误:驱动程序部署任务失败:默认驱动程序包安装任务(可能重新启动)

有谁知道可能出了什么问题?

提前致谢。

0 投票
0 回答
324 浏览

usb - 无法打开服务 xx,当我将 wdf 驱动程序安装到 win7 x64 时

我认为我的 inf 文件有问题。但我的驱动程序和 inf 在 windows xp 和 win7 x86 中工作正常。

我也搜索了这个问题,看到有人说服务的名字不一样。但在我的inf中,它是一样的:ECTEKCANcard

我的问题是(我从 windbg 得到这些):

我的 inf 文件:

有人知道吗?

0 投票
1 回答
3159 浏览

windows - WDF 中的 MSI-X 中断

我在我们用 WDF / KMDF 编写的 Windows 总线驱动程序中实现 MSI-X 中断时遇到了很多麻烦。我已经阅读了MSDN 文档,那里并没有很多有用的信息。我的理解是它应该真的只是“工作”。

我已经更改了我们驱动程序的 INF 文件以添加适当的注册表项,并确认它们在安装时已正确设置。我正在正确查询 PCI 配置空间并确定是否支持 MSI-X 中断。

问题是,一旦我有了这些信息,我就不知道如何更改我的代码来专门将中断设置为 MSI-X。我执行标准调用来配置 WDF_INTERRUPT_CONFIG_INIT 结构并调用 WdfInterruptCreate,但是创建的中断不是消息信号的,我不知道需要做什么才能真正实现这一点。

是否有 WDF 版本的步骤,或者我应该只是在此处执行标准的 WDFINTERRUPT 创建步骤?

有没有人有这样做的经验?任何人都可以提供一个源示例吗?

0 投票
1 回答
177 浏览

windows - 零知识将 PCIE 写入串行 windows 驱动程序需要多长时间?

我需要为 PCIE 编写一个带有中断、连续缓冲区 DMA 和从 PC 到 PCIE 的简单读/写请求的串行驱动程序。我对驱动程序一无所知,对PC架构也有一点了解。平均需要多长时间?

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

kernel - Windows 内核模式编程:驱动程序之间是否可能出现死锁?

在尝试向较​​低级别的驱动程序发送同步请求时,我们的驱动程序挂起时遇到了一些问题。当调用该例程时,该例程当前正在执行DISPATCH_LEVEL

我一直在查看 Microsoft 提供的文档“锁、死锁和同步”,它说以下内容:

考虑以低 IRQL 运行的代码成功获得锁,但线程被中断以运行更高 IRQL 的代码的情况。如果更高 IRQL 代码尝试获取相同的锁,线程可能会永远挂起。较低 IRQL 代码在较高 IRQL 代码退出之前无法运行,但较高 IRQL 代码在较低 IRQL 代码释放锁之前无法退出。只涉及一个线程。为了防止这个问题,获取锁的代码通常会将其 IRQL 提升到任何获取锁的驱动程序代码都可以运行的最高 IRQL。

我们的问题是给我们挂起和蓝屏。虽然我知道我们不应该进行在 DISPATCH_LEVEL 等待的调用并且我们的设计需要工作,但我只是想确保我正确理解 IRQL 机制。

我是否正确地认为 IRQL 是每个处理器的,并且不同的驱动程序将在不同的处理器上运行?我想确认是否发出针对较低级别驱动程序的同步请求DISPATCH_LEVEL实际上是否会通过抢占另一个驱动程序中的线程,因为它的 IRQL 较高。

0 投票
0 回答
1392 浏览

keyboard - 如何从 KMDF 自定义设备驱动程序正确发送击键/键盘输入数据?

我是一名实习生,是驱动程序开发的新手。我的公司希望我为他们制造的几个多点触控 HID 设备编写 KMDF 驱动程序。他们雇用了比我更早的人来解决这个问题,他试图使用 Windows 触摸用法并遇到了一些问题,因此无法完成驱动程序。所以,我们决定我应该编写驱动程序,以便设备像鼠标和键盘复合设备一样工作。这样,我们可以在使用单点触摸时发送系统鼠标数据,并在识别某些多点触摸手势(旋转、缩放等)时发送键盘数据(激活键盘快捷键的击键)。我有手势识别,鼠标部分工作得很好。我从 WDK 中的 HidUsbFx2 示例开始,目前面临两个问题。

问题#1:只有当我在报告描述符中注释掉我的键盘 TLC 时,鼠标才会起作用,并且我的键盘报告功能只有在我在报告描述符中注释掉鼠标 TLC 时才会起作用(直到我完成它为止)。我不知道为什么会这样。这是我的报告描述符:`// Mouse Collection

// 键盘集合

`

问题#2:根据我的调试打印语句,我用来发送键盘输入报告的功能似乎正在将数据发送到系统,但击键从未出现。驱动程序成功完成键盘报告功能,系统继续向驱动程序发送读取请求。唯一的问题是我尝试发送的字符永远不会出现在记事本中(我正在使用记事本测试我是否成功发送击键)。这是我用来发送键盘输入报告的功能:

leave: DbgPrint("0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 状态: %d\n", 报告->reportID、report->reserved、report->modifierKeys、report->key[0]、report->key[1]、report->key[2]、report->key[3]、report->key [4],报告->键[5],状态);

}

*注意:一旦我可以真正让它们成功发送,我将更改我为每个事件发送的击键。我使用这些键码:KEY_A = 4,KEY_B = 5...KEYPAD_PERIOD = 99。

任何关于这些问题的任何信息将不胜感激。我被困了一段时间,需要在八月底之前完成这件事。

0 投票
1 回答
272 浏览

c - 尝试构建 Com0Com - c0clog.h 缺少文件

我正在尝试使用新的 Visual Studio 2013 和 DDK 构建 Com0Com。Microsoft 已经改变了很多驱动程序的构建方式,但我已经能够创建一个驱动程序项目 (KMDF) 并将 Com0Com 源文件添加到项目中。(Com0Com 附带的构建说明不适用于 Microsoft 为创建设备驱动程序而设计的新方式)。

然而,当我构建时,编译器找不到 c0clog.h,而且它似乎没有包含在 SourceForge 上的 zip 文件中。

有没有其他人尝试过构建 Com0Com 并能够解决这个 c0clog.h 丢失的问题?