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

device-driver - 访问 Toshiba 笔记本电脑加速度计设备驱动程序

我有一台新的 Toshiba Satellite Pro S300 笔记本电脑(运行 Windows XP),它带有一个用于硬盘保护的 3D 加速度计。我想利用这个传感器发送的数据。较旧的东芝笔记本电脑/平板电脑有一个可以访问以提取加速数据的 DLL。不幸的是,S300 似乎没有这个 DLL(DLL hack 已在其他地方记录,例如这里)。

HDD Protection 应用程序(它具有与笔记本电脑的位置和运动同步旋转的旋转 HDD 的可爱 3D 可视化)似乎不依赖于任何“非标准”/自定义 DLL(根据 DependencyWalker)。似乎可以通过服务和/或 .sys 设备驱动程序访问数据。我想我设法识别了相关文件,但我不知道如何查找、命名、访问、加载(或“反汇编”)相关功能。

如何发现和使用加速度计数据?

0 投票
2 回答
6686 浏览

winapi - 原始 PDO 将 IOCTL 发送到上层过滤器驱动程序 (kbfiltr/moufiltr) 以启用/禁用设备

我对驱动程序开发很陌生,并试图编写一个简单的过滤器驱动程序来启用或禁用键盘或鼠标设备。如果我能让它工作,我想在插入鼠标时使用它来禁用笔记本电脑上的触摸板。我意识到可能已经有软件可以做到这一点,但我对设备驱动程序真的很感兴趣并想要自己学习如何做到这一点。

我正在使用 WDK 附带的kbfiltrmoufiltr示例,它们作为上层过滤器驱动程序安装。kbfiltr 示例创建了一个可以由用户模式程序枚举和连接的 pdo。这允许我将 IOCTL 发送到由KbFilter_EvtIoDeviceControlForRawPdo处理的 PDO 。但是,当我尝试做任何与过滤器驱动程序相关的事情时,比如调用KbFilter_EvtIoInternalDeviceControl这样我就可以做类似的事情

我得到一个蓝屏死机。不是上面的代码,在 vanilla 示例中,设置为 null 被注释掉,只是调用 Kbfilter 会导致 BSOD。我试图直接在 PDO 中设置设备扩展,但这也会导致 BSOD,大概是因为它是 PDO devExt,而不是 kbfiltr 的?

(相关:从 BSOD 获取堆栈跟踪的好方法是什么?我使用 Virtual PC 作为我的测试环境和未经检查的 XPSP3 构建)

我不能将 IOCTL_INTERNAL_KEYBOARD_DISCONNECT 直接发送到驱动程序堆栈(我知道输入设备一次只接受一个连接?)因此需要原始 PDO。我真的只需要发送两个 IOCTL(启用和禁用),我想我只需使用键盘断开和连接,因为这些已经定义。

如果我对这些假设中的任何一个有误,请告诉我,我知道我对此确实是个菜鸟,但我还没有找到很多关于通过 PDO 进行这种通信的文档。

0 投票
5 回答
3184 浏览

c++ - C 和 C++ 中 struct 的区别

我正在尝试将 C++ 结构转换为 C 但不断收到“未声明的标识符”?C++ 是否有不同的语法来引用结构?

我在另一个结构中使用 KEY_STATE 类型的变量:

导致 错误 C2061:语法错误:标识符“KEY_STATE”

...在KEY_STATE kState 行上;如果这有什么不同,我正在使用 WDK 编译器进行构建。这当然是在头文件中。我正在将 C++ WDM 驱动程序移植到 WDF 和 C。

这是 C2061 的 MSDN 文章

初始化器可以用括号括起来。为避免此问题,请将声明符括在括号中或使其成为 typedef。

当编译器将表达式检测为类模板参数时,也可能会导致此错误;使用 typename 告诉编译器它是一个类型。

将 KEY_STATE 更改为 typedef struct 仍然会导致此错误,实际上会导致更多错误。没有免费的括号或太多括号中的东西,这是文章建议的另一件事。

0 投票
1 回答
3385 浏览

c++ - 从 IRQL=DISPATCH_LEVEL (KbFilter/KMDF) 发送 IOCTL

我在 WDK 中使用 KbFilter 示例,尝试在 KbFilter_ServiceCallback 调用的函数中发送 IOCTL,因此在 DISPATCH_LEVEL 处执行。该函数只需要发送一个 IOCTL 并返回,而不是等待输出缓冲区被填充,因此它可以是异步的、触发并忘记。

我目前正在使用 WDF 函数WdfIoTargetFormatRequestForIoctlWdfRequestSend尝试在 DISPATCH_LEVEL 发送,但一无所获。对 WdfRequestSend 的调用成功,但似乎未收到 IOCTL。

使用WdfIoTargetSendIoctlSynchronously或 WDM 模式IoBuildDeviceIoControlRequest() 和 IoCallDriver()需要 PASSIVE_LEVEL 并且我知道在 PASSIVE_LEVEL 调用这些的唯一方法是创建一个在 PASSIVE_LEVEL 运行的单独线程并通过缓冲区或队列传递指令,同步带有自旋锁和信号量。

有人可以告诉我是否有更简单的方法将 IOCTL 传递给我的过滤器下方的驱动程序,或者当您需要以更高的 IRQL 执行操作时,线程/队列是否接近正常模式?在什么情况下我可以使用KeRaiseIrql,这是我应该使用的吗?谢谢。

0 投票
5 回答
1225 浏览

windows - 自动化 Win32 驱动程序测试

有谁知道部分或完全自动化驱动程序测试安装的方法?

我是驱动程序开发的新手,并且习惯于在高级语言中使用更多的测试驱动方法,因此转移到我无法轻松测试的那种环境对我来说是一个进步。我正在为我的测试环境使用 Virtual PC,目前必须重置它,打开设备管理器,选择设备,点击一堆“你真的确定你不想安装这些系统驱动程序之一”类型对话框,然后最后在主机中重新启动 WinDbg 时重置测试环境,就像测试环境正在启动一样......啊。

在重复这个过程很多很多次之后,肯定有更好的方法来做到这一点吗?商业驱动程序开发人员使用哪些工具/方法/技巧在测试环境中运行他们的驱动程序?

请注意,这与单元测试驱动程序无关,我还没有到那个阶段,也不知道它是否可能。这只是要启动一个附加了 WinDbg 的测试环境,以确保我可能所做的一些小改动符合我的预期。

0 投票
1 回答
952 浏览

windows - 智能卡驱动程序(带有 SCardLib 的 KMDF)问题

我正在使用KMDFSCardlib开发智能卡驱动程序,我使用了 WDK Smarcard Sample 作为参考,我认为我正确实现了除CardPowerand之外的所有回调CardTracking。(我的读卡器和卡现在不支持现在 RESET 命令和插入新卡)

当我尝试运行调用的测试应用程序时,SCardListReaders()我得到SCARD_E_NO_READERS_AVAILABLE. 我使用 INF,就像示例中的一个进行了更改一样,我使用SmartCardReaderGuid创建了一个设备接口,并将设备类型设置为FILE_DEVICE_SMARTCARD.

我不知道我还能做什么,我该如何调试?有任何想法吗?

PS 为什么 SCarLlib 的头文件不在 WDK 的 inc 中,而是在示例目录中?

0 投票
1 回答
297 浏览

documentation - 向 KMDF 驱动程序添加 64 位支持的指南

是否有向 KMDF 驱动程序添加 64 位支持的指南或文档?我有一组很好的 WDM 驱动程序链接,但是很高兴看到 KMDF 特定的指南显示 KMDF 为您处理什么以及驱动程序需要处理什么。

编辑:这是我到目前为止的链接:
64 位驱动程序的编程问题(Windows 驱动程序工具包)
64 位 Microsoft Windows 驱动程序的 64 位指南
清单

0 投票
1 回答
685 浏览

windows - 我应该使用哪些 API 来公开 WebCam 功能?

我正在尝试为旧的 USB 网络摄像头设计 Windows KMDF 驱动程序。

我想我在驱动程序开发/USB 协议方面有足够的信息,但我想知道我应该如何从驱动程序中公开网络摄像头功能,以便 Windows 程序可以利用它。

该网络摄像头具有 3 个功能:

  1. 一个视频流,
  2. 音频流,
  3. “拍照”硬件按钮。

对于其中的每一个,将其暴露给 Windows 的更自然的方法是什么,以便我的网络摄像头可以在相关程序(gTalk、Skype 等)中使用?或者,回到这个问题:这些程序的预期是什么,它们如何检测网络摄像头?

0 投票
1 回答
865 浏览

wdf - 无中生有地创建 WDF 读取请求?

背景:我正在编写一个虚拟 USB 到 RS232 驱动程序。但由于我的硬件是 USB 芯片 (PDIUSBD12) 而不是纯 UART 芯片,驱动程序需要一些特殊的调整。使用超级终端之类的 PC 应该相信它正在与常规的 RS232 芯片通信。反正问题不在这件事上,更多的是理解-WDF-issue,呵呵:)

问题:我想要完成的是创建一个“读取请求”(无中生有)并将其传递给硬件。可悲的是WdfRequestRetrieveOutputMemory导致“访问破坏”/崩溃。我如何创建新请求有什么基本问题吗?WdfRequestRetrieveOutputMemory的输入变量都不是 NULL,但我猜maskRequest变量在某种程度上有问题?!

0 投票
0 回答
449 浏览

device-driver - 处理 KMDF 过滤器中的关闭

我正在研究 kmdf 卷过滤器驱动程序并想处理关机。WDF 书中的文章WDM IRPs and KMDF Event Callback和评论似乎表明 WDF 仅支持控制(非 PNP)设备的 IRP_MJ_SHUTDOWN。所以我WdfControlDeviceInitSetShutdownNotification(WdfDeviceShutdown)为我的控制对象添加了调用,这允许我在关机时将文件保存到相同的卷。WdfDeviceShutdown但是,我没有看到在刷新之前调用的文档 sys 。我已经使用 EvtDeviceWdmIrpPreprocess(IRP_MJ_FLUSH) 回调了刷新。查看 Dbg 打印,我总是在回调之前看到刷新WdfDeviceShutdown回调。

我想知道我是否遗漏了什么。对此行为的任何评论都将帮助我更好地理解这一点。我之前看到过刷新,因为控制设备处于低于文件系统的卷过滤器级别,因此执行程序在关闭/通知我的设备之前会刷新文件系统缓冲区。

注意:如果我使用)尝试写入文件时WdfControlDeviceInitSetShutdownNotification(WdfDeviceLastChanceShutdown会出错。0xc0000189 (STATUS_TOO_LATE)