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

windows - 在 64 位 Windows 中跳过驱动程序登录的解决方法

我是个人,而不是公司,我正在研究虚拟内核模式设备驱动程序。我知道我可以测试签名驱动程序并在测试模式下运行。但是我想免费分发我的驱动程序,但我没有资源通过 verisign 或 globalsign 购买签名,因为它非常昂贵,而且我没有通过这个驱动程序获得任何收益。

此外,对某些用户来说,测试签署驱动程序将是一项艰巨的任务。所以我想知道是否有任何解决方法可以在 64 位中使用没有签名的驱动程序?就像在兼容 32bit 的情况下运行它,或者可以代表用户自签名驱动程序的脚本。


所以现在的问题本质上是,如果我分发此过程中提到的所有 exe 并制作一个脚本来运行所有这些命令。那么驱动程序可以由用户使用脚本签名吗?

程序 :

1.执行Inf2Cat.exe /driver:"U:\MyDriver" /os:7_X64

2.在WDK中找到makecert.exe Makecert -r -pe -ss PrivateCertStore -n "CN=TestCertforWDK" TestCert.cer

3.使用WDK中的Signtool.exe对cat文件进行签名 Signtool sign /v /s PrivateCertStore /n TestCertForWDK /t http://timestamp.verisign.com/scripts/timestamp.dll "U:\MyDriver\MyDriver.cat"

4.使用WDK中的Signtool.exe对驱动进行签名 Signtool sign /v /s PrivateCertStore /n TestCertForWDK /t http://timestamp.verisign.com/scripts/timestamp.dll "U:\MyDriver\MyDriver.sys"

5.在测试机上,导入证书:certmgr.exe /add TestCert.cer /s /r localMachine root

6.将其添加到受信任的发布者列表 certmgr.exe /add TestCert.cer /s /r localMachinetrustedpublisher

7.验证驱动Signtool的标志 verify /pa /v MyDriver.sys

8.验证cat文件签名Signtool verify /pa /v /c MyDriver.cat MyDriver.inf

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 投票
0 回答
102 浏览

windows - 签署内核模式驱动程序

我有一个 kmfd 驱动程序,我正在从http://www.digicert.com/code-signing/购买证书,这个证书可以在 Windows 7 上使用吗?还是我只需要从威瑞信购买,他们收取高达 400 美元/年的费用,而这是 178 美元/年。

0 投票
2 回答
657 浏览

process - 在 KMDF 驱动程序中处理退出/删除通知

当进程停止时,我需要在 KMDF 驱动程序中获得通知。我不想使用PsSetCreateProcessNotifyRoutine,因为这会通知我创建或销毁的每个进程。只有当我感兴趣的某些进程 ID 被销毁/退出/删除时,我才想知道/收到通知。(我不关心进程创建)。

我想到的一种方法是与驱动程序共享应用程序创建的事件。我将在驱动程序中创建一个工作线程并使其等待用户创建的事件,当应用程序终止时,等待将中止。这是了解进程何时终止/关闭的好方法,还是有更多标准方法可以做到这一点?我在一些论坛上读到共享事件不是一个好主意,我应该使用重叠的 ioctl,但这显然在这里不起作用。

0 投票
1 回答
287 浏览

windows - WdfRequestIsCanceled 与 WdfRequestMarkCancelable

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

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

感谢您的投入。

0 投票
0 回答
11971 浏览

c++ - 错误:C1083:无法打开包含文件:'wdm.h':没有这样的文件或目录

我正在尝试使用 qtcreator 构建此代码,我的意思是使用RtlInitUnicodeStringIoCreateDevice

我收到此错误:

这是我的 .pro 文件

1)如何修复包含路径的错误

2)任何人都可以为我解释使用IoCreateDevice和如何创建theDriverObject

请任何帮助!!!!提前致谢。

0 投票
2 回答
1416 浏览

kmdf - 如何从客户端应用程序访问 KMDF 驱动程序

我编写了一个示例 KMDF 驱动程序。我不知道我是否做对了所有事情,但在 DebugView 实用程序中看到 KMDF 驱动程序打印调试消息 - 当我将此驱动程序添加为新硬件时。它还在设备管理器下显示为“示例设备”。

现在我想编写一个可以调用这个驱动程序的示例客户端——这样我就可以在驱动程序和客户端之间建立连接。我读到我们需要使用“CreateFile”和“DEviceIOControl”等。但我无法开始使用它。

您能否指导我创建示例客户端以访问示例 KMDF 驱动程序?

我的驱动程序 INF 文件如下所示:-

0 投票
0 回答
363 浏览

windows - 有没有办法拦截 KMDF 中的每一个 IRP

我正在编写一个 KMDF 驱动程序,该驱动程序需要在每个 IRP 传递到 ioQueue 之前拦截它。

我有一个注册了 PreprocessIrpCallback 的回调函数,并希望像这样将它挂接到框架中

但是,如果我想拦截每一个 IRP,问号里的内容是什么?

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 如何/何时决定终止正在进行的请求?

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

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