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

driver - 驱动程序的卸载按钮被禁用

我已经为虚拟设备编写了相当简单的第一个驱动程序。它还有一个 .inf ,我使用devcon.exe安装驱动程序。

它安装良好且功能正常,但我的问题是当我尝试卸载它时:devcon.exe 无法卸载它,并且在设备管理器中,驱动程序的卸载、回滚和禁用按钮被禁用。我现在主要关心的是卸载按钮。

我的驱动程序实现了DriverObject->DriverUnload. 我查看了 msdn 文档,现在我找不到DDUninstall驱动程序的任何 INF 部分。

当我查看%WinDir%\inf\setupapi.app.log时,当我尝试使用 devcon.exe 将其删除时,我看到以下错误:

我在代码或 .inf 文件中是否缺少任何内容,以便可以卸载我的驱动程序?

0 投票
1 回答
411 浏览

createfile - CreateFile 不会阻止其他进程打开我的设备

我正在使用 CreateFile 打开与我的 USB 硬件的连接。如果我有两个(或更多)硬件连接到 PC,我想防止我的 PC 应用程序的多个实例(不同的 PID)连接到相同的硬件。

我认为这是通过使用 dwShareMode = 0 运行 CreateFile 来完成的。由于某种原因,这不起作用。当对同一 USB 设备运行 CreateFile 时,PC 应用程序的几个不同实例将获得有效句柄。

如果可能的话,我想在不更改驱动程序的情况下按我的意愿进行这项工作,因为这将调用驱动程序证书签名,yadayada ...

我错过了什么?

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

0 投票
2 回答
827 浏览

windows - Waiting for vertical blank in kernel mode?

I'm writing a driver that needs synchronization with vertical blank interrupt to send some data down the USB pipe.

In user-mode there are Direct X functions available for this like IDXGIOutput::WaitForVBlank and few older ones. I am not able to use them from kernel. I found another interface in Windows 8 SDK: D3DKMTWaitForVerticalBlankEvent which even has a kernel header (the header is in /km/ folder of the SDK), but it requires gdi32.lib which a user-mode library and linking with it cripples the driver.

Is there any way I can wait or get a notification about vertical blank occurence (without polling)?

0 投票
1 回答
903 浏览

driver - 如何:在用户模式和内核模式之间进行 2 路通信

我编写了一个驱动程序,它从 IRP 缓冲区中提取一个值。现在基于这个关键字,我必须通过或丢弃 IRP。所以我需要从内核模式驱动程序中与数据库进行通信,这并不容易。因此,我正在使用应用程序或 exe 来执行此操作,这将导致我将传递或丢弃 IRP 的真假。

我想将驱动程序与我在客户端应用程序中获取数据的应用程序链接起来。

我考虑过使用可以充当管道的临时文件。

请提出一些建议。

0 投票
2 回答
404 浏览

winapi - 为什么 DeviceIoControl 将 12 个字节的信息添加到用户提供的输入缓冲区?

我希望这不是一个完全脑残的问题。

我正在编辑模板 WDF Windows USB 设备驱动程序,以将格式化数据发送到设备的批量输出管道之一;必须以某种方式设置数据以告诉设备读取内部寄存器。

问题是我无法让数据以所需的确切格式通过总线。我编写了一个小型测试应用程序来枚举设备并DeviceIoControl在输入缓冲区设置为我根据规范设置的结构的情况下进行调用。

我有一个工作案例的 USB 总线跟踪副本(由我无权访问其源的驱动程序执行),并且我捕获了一个总线跟踪,以了解当我在驱动程序中调用自定义 IOCTL 时会发生什么。我通过总线看到的是我设置的以 12 个字节数据为前缀的数据结构;数据结构是正确的,但我想知道最初的十二字节数据是什么,并阻止驱动程序发送它们。

我相信驱动程序已经正确编写;我在驱动程序中放置了一些调试跟踪,看起来由检索到的缓冲区WdfRequestRetrieveInputMemory已经预先添加了 12 个字节,所以这似乎是在驱动程序前发生的。

如果它是有用的信息,则 IOCTL 设置METHOD_BUFFEREDFILE_ANY_ACCESS.

设置它的测试代码的相关部分非常简单:

我通过总线看到的数据是:80FD1200 CCCCCCCC CCCCCCCC+(我的数据)。

有没有人有任何见解?

0 投票
1 回答
117 浏览

driver - wdf 驱动程序如何处理设备的重新开机事件?

我最近从另一个人那里接手了设备驱动程序的维护工作。

该驱动程序与 pci-e 板配合使用。系统启动时,驱动会分配一块128Mb的内存,然后在板上设置一些寄存器来传递分配内存的信息。稍后当板子工作时,它会将一些数据写入内存,其他一些应用程序将通过驱动程序访问这些数据。

该板由独立适配器供电(不是由 pci-e 插槽供电,它是演示板或开发板)。所以有时候板子里的fpga程序出错时,我们会重新给板子上电(这很快)并重新启动电脑(这很慢,否则板子将不知道驱动程序分配的内存)。

我的问题来了:驱动程序是否可能知道电路板已重新上电?如果它能够检测到事件并做一些类似于系统启动时所做的事情,它将为我们节省很多时间。

我以前对驱动程序开发没有太多了解,如果有任何不太复杂的教程/文章来解决这类工作,那将会很有帮助。或者也许我必须找一些厚书从头开始学习?

希望我已经让自己理解,任何建议将不胜感激:-)

0 投票
1 回答
287 浏览

windows - WdfRequestIsCanceled 与 WdfRequestMarkCancelable

谁能列出在 wdf 中使用以下两种方法取消 IO 的优缺点?1) 使用 WdfRequestMarkCancelable() 将请求标记为可取消。提供取消例程并同步完成路径。2) 在处理 IRP 时继续使用 WdfRequestIsCanceled() 进行轮询。根据返回值完成。

我知道 WdfRequestIsCanceled() 是一种轮询方法,而 WdfRequestMarkCancelable () 是异步的。但是 WdfRequestMarkCancelable() 是否值得为同步完成/取消路径付出额外的努力?

感谢您的投入。

0 投票
1 回答
214 浏览

c - 是否可以检索创建 WDFREQUEST 的 CPU?

我正在尝试将 CompleteRequest 的完成与最初发出请求的 CPU 关联起来。有没有办法检索在 FdoDeviceControl 期间发出请求的 CPU 或任何其他方式来查看请求在进入调度队列之前来自哪里?

0 投票
1 回答
1531 浏览

device-driver - WDF 安装程序问题

我在运行 KMDF 1.5 的 32 位 Vista 机器上安装 KMDF 1.9 驱动程序时遇到问题。我希望 coinstaller 应该将 Vista 机器更新到 KMDF 1.9。但事实并非如此。

我错过了什么?

setupapi.dev.log 说:

在已经获得 KMDF 1.9 的 Win7 上一切正常

0 投票
1 回答
261 浏览

usb - Windows 何时取消进行中的 WDF 请求?

我正在为 USB3 设备编写一个使用 WDF (KMDF) 的 Windows 设备驱动程序,该设备一次传输大块数据。我编写了一个用户级应用程序来测试这个功能,并且在大多数情况下,一切正常。

我遇到的问题是这样的:我发现当我强制关闭(来自cmd窗口的CTRL + C)应用程序中间传输时,取消时正在进行的数据传输立即停止并且主机似乎只是停止与该端点通信。我在 USB 总线跟踪上观察到了这一点。请求在功能驱动程序中返回为“STATUS_CANCELLED”

我查看了其他类似的第三方设备并在这些设备上使用他们的驱动程序运行他们的测试应用程序,发现当我在数据传输过程中终止他们的测试应用程序时,传输在应用程序关闭之前完成。

我的问题:

当应用程序关闭时,Windows 如何/何时决定终止正在进行的请求?

有没有办法将请求标记为“不可取消”?我已经搜索了文档,但没有发现任何迹象表明我需要做一些事情来防止请求在转移过程中被取消。

任何见解表示赞赏,谢谢。