问题标签 [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 回答
545 浏览

windows - Microsoft RAM 磁盘示例驱动程序 - 解决访问问题的想法?

我成功编译和安装了 Microsoft RAM 磁盘示例驱动程序(带有 WDK 8.1 的 VS2013 - 也使用了 WDK 8.1 驱动程序示例)。

自述文件告诉安装后,您可以在管理员提示符下使用 RAM 驱动器。可能与此处询问的问题相同:https ://superuser.com/questions/344577/how-to-access-ramdisk-drive-from-non-admin-user-account-on-windows-xp

根据此线程中给出的答案,我将此代码添加到 RamDiskEvtDeviceAdd 函数中:

这应该为管理员、世界和保留帐户添加 RWX 权限。

现在普通用户可以访问驱动器并将文件复制到 ram 驱动器。它在资源管理器 (Windows 7) 中也是可见和可访问的。但我仍然无法删除文件(即使是管理员)。第一个提示告诉您删除文件需要管理员权限。如果您确认此提示,则会出现第二个提示:“您需要所有人的权限才能更改此文件。”。

查看磁盘驱动器的属性时,没有可让您检查或授予任何权限的安全选项卡。所以我认为缺少某种安全描述符。

我已经尝试查看其他 RAM 驱动器实现,但它们可能是用不同的驱动器模型(非 WDF)编写的,在这方面似乎工作方式完全不同。

我还尝试获取有关 WDF 的 MSDN 页面的更多信息,但找不到有用的信息。

有人可能会问:为什么不使用有效的 RAM 驱动器解决方案?但实际的问题是创建一个磁盘驱动程序,可以将其配置为按需创建 IO 错误。类似于 Linux 的此解决方案:http ://www.scylladb.com/2016/02/16/fault-injection-filesystem-software-testing/

所以我认为使用一个简单的 RAM 磁盘驱动程序可能是一个好的开始。欢迎任何关于如何解决删除访问权限问题的评论。

0 投票
1 回答
102 浏览

windows - 连接两台电脑后在单独的电脑上调试驱动

我即将开始一个需要在单独的计算机上调试程序的项目。基本上我正在编写一个文件系统过滤器驱动程序。它在窗户上。为此,驱动程序的调试必须在单独的系统上进行。

我需要知道如何连接两台计算机,以便我可以在一个系统(Windows 7)上运行驱动程序并在不同系统(Windows 8.1)的 Visual Studio IDE 中调试它

更新:在 msdn 上给出了以下文章https://msdn.microsoft.com/en-us/library/windows/hardware/hh439665(v=vs.85).aspx

它确实显示了创建驱动程序但没有指定如何连接两台计算机,这是我的问题。如何在 VS 中进行远程调试以及如何进行连接两台计算机的设置

任何帮助将不胜感激,谢谢

0 投票
1 回答
283 浏览

windows - KMDF WdfDriverCreate 函数返回“资源不足”

我正在尝试编写一个 kmdf 驱动程序来针对自定义 PCIe 板。按照微软提供的默认项目,我对 .inf 文件做了一些小改动,主要是更改字符串的名称并提供我们 PCIe 板的硬件 ID。

部署驱动程序正常工作。驱动程序安装并显示在设备管理器上,但它说它没有正确安装或可能已损坏。

在调试时,我看到 WdfDriverCreate 失败,错误为 0xC000009A,这意味着资源不足。

作为参考,这是 kmdf 模板项目为您生成的代码,这是我目前正在运行的:

我的第一个问题是,什么会导致这种情况?

通过运行引发错误后,我尝试转储日志

但它永远不会奏效。我确保所有符号路径都正确加载,如下所示

“CIPDriver”是我的驱动程序。

运行转储命令时,输出如下:

和 .sympath 的输出

其中 C:\winsymbols 是我通过以下指南获得的 Microsoft 符号缓存:https ://msdn.microsoft.com/en-us/library/windows/hardware/ff558829(v=vs.85).aspx

我的第二个问题是,如何正确设置调试器以转储日志?

谢谢

0 投票
0 回答
676 浏览

c++ - 使用 DiInstallDriver 以编程方式安装 KMDF

我想在 Windows 7 32 位机器上安装 kmdf 驱动程序。起初我使用 hdwwiz(添加硬件工具),它工作正常。

现在我想使用软件以编程方式安装它。经过一番研究,我发现DiInstallDriver我使用了以下代码

运行软件后我得到“驱动程序安装正确!”,这意味着功能成功返回,但我在设备管理器中找不到它?

知道出了什么问题吗?

0 投票
1 回答
211 浏览

windows - WDF 内部 IOCTL 不返回输出

我目前正在编写一个公开虚拟 COM 端口的驱动程序。在驱动程序中,我从端口 FDO 将内部 IOCTL 发送到堆栈下方,由 PDO IO 队列处理。由于某种原因,输出数据没有写入提供的输出存储器。

我已通过 windbg 确认正在调用 IoCtl_Vcp_GetPortInfo(见下文),并且按预期工作。请求以 STATUS_SUCCESS 完成。在我调用 WdfRequestComplete 时,输出缓冲区具有有效数据。但是,当控制权返回到 GetPortInfo(见下文)时,提供的缓冲区尚未被覆盖。我通过访问接收缓冲区的硬件断点确认了这一点。在 WdfIoTargetSendInteralIoctlSynchronously 调用期间不会读取或写入它。

负责发送 IOCTL 的代码如下:

处理 IOCTL 的代码:

IOCTL 代码定义:

0 投票
0 回答
331 浏览

windows - 以编程方式重新启动驱动程序窗口

我正在研究 KMDF pcie 驱动程序。目前,如果我断开/重新连接设备,Windows 不会识别设备已断开连接,不会重新枚举节点,也不会释放驱动程序。

目前最好的方法是通过设备管理器手动禁用/启用驱动程序,这会导致重新加载。当我尝试通过 SetupAPI.h 手动执行此操作时,通过使用 SetupDiSetClassInstallParams 和 SetupDiCallClassInstaller,我在 SetupDiCallClassInstaller 上收到 0xe0000219 错误,对应于 NO_ASSOCIATED_SERVICE,我不知道如何处理这个问题。有没有更好的方法以编程方式强制重启?

或者,有没有办法获得翻译的资源列表 WDFCMRESLIST,通常由即插即用 EvtDevicePrepareHardware 回调提供?这样我就可以重新配置我的驱动程序。

0 投票
1 回答
381 浏览

windbg - WinDBG:如何从 WDFFILEOBJECT 句柄中获取底层 FILE_OBJECT?

我有一个 WDFFILEOBJECT 句柄(0x0000057fedd9b8b8),我想知道它的底层 FILE_OBJECT 地址,以便我可以!object xxxx用来查询 FILE_OBJECT.PointerCount.HandleCount. 我可以使用什么 windbg 命令?

!wdfkd.wdfhandle 0x0000057fedd9b8b8 f0似乎没有提供该信息。

在此处输入图像描述

如果它是 WDFDEVICE 句柄,我知道!wdfkd.wdfdevice可以告诉我底层的 DEVICE_OBJECT,但是 WDFFILEOBJECT 呢?

====== 解决(很多天后)=====

根据snoone的提示,我想通了。实时信息如下:

这一次, FileObject= 0x0000057fede811b8

在此处输入图像描述

我必须先使用!wdfkd.handle 0x0000057fede811b8 f0,因为句柄值 0x0000057fede811b8 不是有效的内核地址,!wdfkd.handle它告诉句柄后面的 KMDF FxObject 的真实内核地址。

0 投票
0 回答
216 浏览

driver - 当 Windows 进入“连接待机”时,如何让我的驱动程序暂停我的 USB 设备

我正在尝试使用带有 x86 Windows 10 平板电脑的OSR USB FX2 学习套件,但我发现了与省电有关的问题。

软件环境:

  • WDK10 示例代码kmdf_fx2
  • WDK10 10.0.10240 版本
  • 视觉工作室 2015 更新 1
  • 运行 Windows 10 x64 10586 的平板电脑;powercfg /a显示此平板电脑支持“连接待机”。

我可以看到以下行为。在平板电脑上运行

这使得 EXE 块在同步 ReadFile() 中。然后,点击 Windows 开始标志,执行电源 -> 睡眠,平板电脑屏幕关闭,我相信它已经进入睡眠状态(至少很快就会进入睡眠状态)。

等待 10 秒,OSR FX2 板上的 7 段 LED 一直显示“A”,而不是变成“S”(表示挂起)。再等 100 秒,仍然看到“A”。

'A'表示 SOF 帧在 USB 线上仍然处于活动状态,这对节电非常不利,

相反,如果 USB 键盘连接到平板电脑。让平板电脑休眠将停止 SOF 帧(=USB 暂停,我可以用 Beagle USB 480 USB 分析仪确认这一点)。

我的问题很明确:如何修改 osrusbfx2 驱动程序,以便让平板电脑休眠可以停止 SOF 帧。

一些背景资料:

  • 如果我只是将 OSR FX2 连接到平板电脑但不运行 osrusbfx2.exe ,则 FX2 将在等待 10 秒后挂起,无论桌子是工作还是睡眠。键盘驱动程序如何实现这一点?
  • 在不支持“连接待机”但传统 S1 或 S3 待机的 Windows 系统上,当 Windows 进入睡眠状态时,FX2 将始终挂起。

OSR USB FX2 板在 S0 待机平板电脑进入睡眠状态后一直显示“A”

0 投票
0 回答
253 浏览

c++ - 司机的符号链接消失

在我的 UMDF Windows 驱动程序中,我在目录中创建了我的设备的符号链接,\DosDevices\Global\以跟踪设备实例。因此,如果设备连接到主机,则会\DosDevices\Global\MyDevice0创建符号链接。如果连接了另一个设备,\DosDevices\Global\MyDevice1则会创建一个符号链接。我通过以下代码实现了这一点:

方法文档:IWDFDevice::CreateSymbolicLink

如果我快速将两个设备连接在一起,这将起作用。但是,如果我等待大约 10 秒并连接第三个设备,它似乎会获得\DosDevices\Global\MyDevice0不会发生的符号链接,因为第一个设备已经获得索引0并且仍然连接。

那么为什么符号链接似乎在一段时间后被删除了呢?另外我想知道我的方法是否适合计算设备实例?

0 投票
1 回答
133 浏览

windows - WHQL 驱动程序测试 INF 错误

当我运行 WHQL 测试“DF - 根据组件特定要求验证驱动程序 INF”时,它给了我这个错误:

inf C:\Windows\Inf\oem10.inf 在第 103 行出现错误。必须为“CoInstallers32”注册表项指定标志 0x10000。

oem10.inf 的第 103 行:

HKR,,CoInstallers32,0x00010008,"WdfCoInstaller01011.dll,WdfCoInstaller"

如您所见,标志 0x 1 0000 在我的值 0x000 1 0008 中指定。当我将值从 0x00010008 更改为 0x00010000 时,测试验证正确。问题是当指定 0x00010000 而不是 0x00010008 时,我无法在 Windows Vista 上安装驱动程序。

为什么是这样?这是 HLK 错误吗?发生错误的 WHQL 测试的目标系统是 Windows 10 x64。