问题标签 [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 回答
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 投票
5 回答
1153 浏览

c# - 限制特定应用程序/用户在 Windows XP-8 下对音频设备的访问

我编写了一个 c# 4.0 应用程序,它分析麦克风输入并记录代表客户输入的信用卡号码的 DTMF 音调。这一切都很好,但由于我们在PCI 合规性下工作(请参阅www.pcisecuritystandards.org),我们不希望允许登录用户(呼叫中心工作人员)收听甚至记录麦克风输入,以便他们随后可以使用第三方应用程序或手机自行解析信用卡号。所以我的问题是:

  • 如何将麦克风输入限制特定应用程序,使其无法在其他地方听到或录制?

如果没有解决办法,就会出现第二个问题:

  • 如何将麦克风输入限制特定用户,使其无法在其他地方听到或录制(我可以在特定用户凭据下将软件作为 Windows 服务运行)?

亲切的问候,JB

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

driver - Realtek 网络适配器 8168E 使用环回发送/接收

我正在尝试使用环回(对于 Windows 7 平台)从 Realtek 8168E 发送和接收(写入 tx 缓冲区并从 rx 缓冲区读取)读取 rx 缓冲区给出 0。在检查中断状态寄存器时,TDU 和 RDU 位设置为 1( Tx/Rx 描述符不可用)

网络适​​配器:Realtek 8168E

参考数据表:Realtek 8168B

发送端配置 - 根据数据表(第 55 页)中给出的规范为 TX 描述符分配内存。将描述符对齐到 256 字节对齐。

  • 还分配了一个单独的缓冲区(TXBuffer)来存储要传输的数据。

  • 将 TXBuffer 的地址放入 TX 描述符中的指定字段。

  • 启用 TX 配置寄存器 (40h) 中的 MAC 环回位。

  • 然后我们启用了 TxPoll 寄存器 (38h) 中的 NPQ 位。

  • 之后,我们通过偏移量 37h 完成了 NIC 重置。

  • 然后我们启用了 BMCR 寄存器中的环回位。

  • 在中断屏蔽寄存器 (3Ch) 中启用 Tx OK 和 Tx Descriptor Unavailable 中断。

  • 将 Tx 描述符地址放入 MAC 寄存器 TNPDS (20h)。

  • 然后最后启用命令寄存器(37h)中的 TE 位。

同样,我在 Rx 端做了必要的配置。

下面是我给的缓冲区

* PL。建议如何调试这种情况。Tx & Rx 描述符配置的正确顺序,请共享。*

0 投票
1 回答
452 浏览

msbuild - 如何在未安装 Visual Studio 的情况下使用 MSbuild 构建 Win8 驱动程序

我想在没有安装 Visual Studio 的情况下通过 WDK8.0 构建 KMDF 驱动程序。我查看了 msdn,它说 MSBuild 可以做到。

但是由于WDK8.0不包含编译器,如何在没有VS2012的情况下使用MSbuild构建驱动程序?

谁能给我解释几个词?如何在没有 VS2012 的情况下构建 Windows 驱动程序。

0 投票
0 回答
194 浏览

windows - WDF驱动如何释放用户程序获取的资源?

标题中的驱动程序与 PCIe 卡一起工作,以将一些数据从外部世界传输到 PC。

驱动程序在启动时会分配几十MB的内存,然后用户程序可以将这些内存映射到自己的地址空间,然后数据可以被卡放在那里,供用户程序访问。

我的问题:

  1. 假设用户程序在映射内存后崩溃,或者在退出前忘记取消映射内存,这会导致任何资源泄漏吗?
  2. 如果第一个问题的答案是正确的,那么驱动程序中是否可以采取任何措施来避免泄漏?

任何建议将不胜感激。

0 投票
1 回答
854 浏览

memory-management - DMA 事务的内存对齐 (Windows Driver Foundation)

我们正在使用 Windows 7 的 WDF 为定制的 PCI-Express 设备编写基于 DMA 的驱动程序。

您可能知道,PCI-Express 总线事务不允许跨越 4k 内存边界。自定义设备不检查这一点,因此我们需要确保驱动程序只请求与 4k 内存边界对齐的 DMA 传输。

设备的配置文件是 WdfDmaProfilePacket64。

我们尝试使用 WdfDeviceSetAlignmentRequirement(DevExt->Device, 4095),但这不会导致 DMA 起始地址正确对齐。

我们如何配置 WDF 框架,使其只请求正确对齐的地址?

0 投票
1 回答
629 浏览

c# - 在 C# 中将 IOCTL 发送到 64 位机器

我将 IOCTL 发送到我的键盘过滤器驱动程序,代码如下:

之后的代码工作正常。问题出在这里,这适用于 32 位机器,但不适用于 64 位机器。在 64 位机器中,deviceInterfaceDetailData.DevicePath 为空,而在 32 位机器中,我得到了有效的设备路径。构建过程中是否有问题?

0 投票
1 回答
299 浏览

wdk - 在内核模式驱动程序中存储数据

我的内核模式驱动程序中有一个数组。驱动程序是否可以保存阵列数据并在加载时恢复相同?