问题标签 [wdm]
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.
visual-studio - 如何创建一个基本的、空的、WDM 驱动程序?
我试图说服 Visual Studio 2013 构建驱动程序。但从未见过 Visual Studio 2013 成功构建驱动程序,我不知道如何解决该问题。
所以是时候回到起点了。删除整个解决方案并开始一个接一个地添加内容,直到构建失败。除了我无法获得一个空的解决方案来构建。
让我们创建一个新的空 WDM 驱动程序项目
在 Visual Studio 2013 中,我选择:
- 文件,新建,项目
- 模板, Visual C++ , Windows 驱动程序, WDM
- 空 WDM 驱动程序
我现在有一个新的、空的、驱动程序解决方案:
除非我尝试构建它,否则它会失败:
SIGNTASK:SignTool 错误:找不到文件:D:\Develop\TestDriver\MyDriver3\Win7Debug\MyDriver3.sys
现在这个错误并不意外,解决方案中甚至没有任何代码可以构建到.sys
文件中!
所以我会添加一些代码
现在让我们通过添加一个空的 WDM 驱动程序文件来创建一个空的 WDM 驱动程序项目:
来源.c
现在这也失败了,但这次失败并显示与上次完全相同的错误消息:
SIGNTASK:SignTool 错误:找不到文件:D:\Develop\TestDriver\MyDriver3\Win7Debug\MyDriver3.sys
这是有道理的,没有MyDriver3.sys
文件。不在那个文件夹里,不在任何地方。这里没有.sys
文件,那里没有.sys
文件。任何地方都没有.sys
文件。
如何创建一个基本的、空的、WDM 驱动程序?
所以这给我留下了一个问题:
如何创建一个基本的、空的 WDM 驱动程序?
我担心即使 Visual Studio 确实创建了一个.sys
文件,它也会在下一个错误时失败。所以我想要的是一个空 WDM 解决方案的锥形示例 - 构建。
奖金阅读
windows - 如何手动部署驱动服务?
如何手动部署或注册 Windows 过滤器驱动程序?
警告:前面有很多“研究工作证明”。如果您不想阅读,则无需再阅读。我只是详细地指出,我已经尝试了你应该做的,我已经尝试了 MSDN 所说的,并且我已经尝试了 Internet 上任何地方的任何人所建议的一切。
tl; dr:预期的方式是什么?
背景
我正在测试将在 Visual Studio 2013 中开发的 64 位驱动程序部署到 64 位 Windows 机器上。我想用 Windows 注册驱动服务,然后启动它。
你试过什么
Visual Studio 2013 驱动程序部署功能
理想情况下,您将使用Visual Studio 的功能自动部署到远程计算机。不幸的是,它不起作用(“发生了扩展错误”)
使用添加新硬件向导
理想情况下,您应该使用 Windows添加新硬件向导(请参阅 MSDN 页Using the Add Hardware Wizard to Install a Driver Package。幸运的是,从 Windows 7 开始,Microsoft 从控制面板中删除了添加新硬件向导;需要您手动运行
Hdwwiz.exe
从提升的命令提示符。不幸的是,您不能使用添加新硬件向导来添加安装驱动程序包,因为添加新硬件向导仅适用于硬件(即它不适用于过滤器驱动程序):向导知道这一点,因此不会让您安装任何驱动程序服务。
SC 命令行实用程序
sc.exe
理想情况下,您可以使用提升的命令提示符下的工具使用服务控制管理器手动注册驱动程序服务:不幸的是,即使驱动程序文件上有有效的数字签名:
Windows 将拒绝安装驱动程序:
OSR 的驱动程序加载器实用程序
理想情况下,应该使用OSR 的 Driver Loader 实用程序。但即使使用经过有效数字签名的驱动程序文件,驱动程序也不会安装:
.INF 设置文件
理想情况下,您将部署驱动程序包并通过从
.inf
. 然后我可以右键单击 INF,选择Install。但它只是不起作用——它没有注册任何新的驱动程序服务。带有 DefaultInstall 部分的 .INF 设置
理想情况下,您只需使用一个
.INF
文件作为DefaultInstall部分。Windows 只会执行DefaultInstall部分。不幸的是,MSDN 警告您不能将其用于驱动程序:注意驱动程序包 的 INF 文件不得包含 INF DefaultInstall部分
你不能这样做的原因是因为DefaultInstall没有AddService指令。即使我们忽略警告并尝试无论如何它也不起作用 - 它不会注册任何新的驱动程序服务。
带有 DefaultInstall.Services 部分的 .INF 设置
虽然 MSDN 警告您不要使用 DefaultInstall 来注册驱动程序服务,但我们可以忽略它们并使用该
[DefaultInstall.Services]
部分。幸运的是,它实际上尝试安装驱动程序服务:但 Windows 随后声称该驱动程序未签名:
实际上没有注册驱动程序服务。
SetupAPI InstallHinfSection 函数
理想情况下,我可以使用 SetupAPI 运行与上述等效的命令行:
除非驱动程序没有安装。函数返回成功;但 Windows 认为驱动程序未签名:
使用 BCDEDIT 启用 TESTSIGNING
理想情况下,我会按照The TESTSIGNING Boot Configuration Option中的说明进行操作,该说明表示从提升的命令提示符运行:
除了失败并出现错误:
/li>使用 BCDEDIT 打开 DEBUG
理想情况下,我会按照在 Development and Test 期间安装未签名驱动程序的说明进行操作,该说明说要从提升的命令提示符运行:
除非失败并出现错误:
/li>使用高级恢复选项禁用驱动程序签名强制
理想情况下,我会使用高级恢复选项来禁用驱动程序签名强制:
除非 Windows 启动驱动程序签名仍然启用:
在 BIOS 中禁用 SecureBoot
理想情况下,在这台虚拟 Hyper-V 计算机中,我会在其虚拟 BIOS 中禁用 SecureBoot:
然后尝试禁用驱动程序签名策略。
哦,我的上帝,三天。我想请微软的人解释一下:
- 不仅是在开发过程中测试驱动程序的正确方法
- 但要详细解释为什么上述每次尝试都失败了
什么是正确的方法
而不是我尝试随机的事情,一遍又一遍(一遍又一遍。一遍又一遍),安装过滤器驱动程序服务的正确方法是什么?
奖金问题
为什么微软拒绝让开发人员的生活更轻松?
奖金喋喋不休
驱动程序文件使用有效、受信任的证书进行签名。
签署 .sys 驱动程序文件的证书也位于本地计算机 受信任的根证书存储中:
这就是驱动程序文件的签名有效且受信任的原因。
MSDN 上随机页面上的一条一次性评论说,必须将测试证书添加到本地机器存储的两个位置:
这就解释了为什么我将证书添加到另一家商店:
Windows 10 技术预览版,64 位
奖金阅读
visual-studio-2013 - 错误:此模板试图加载组件程序集“Microsoft.DriverKit.DriverWizard”
当我尝试在 Visual Studio 2013 中为 WDM 创建一个空项目时出现以下错误
错误:此模板试图加载组件程序集“Microsoft.DriverKit.DriverWizard,版本=6.4.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。有关此问题以及如何启用此模板的详细信息,请参阅有关自定义项目模板的文档。
获得此错误的过程:
请求帮助以解决此问题,因为我无法理解问题的原因或解决方法。任何帮助将不胜感激。
c - Visual Studio - 找不到 ntoskrnl.exe
我正在编写一个 Windows DLL,我需要来自 wdm.h 的一些函数。我正在与 ntoskrnl.lib 链接,它编译只是 find 没有警告或错误,当它运行应用程序时,它说找不到 ntoskrnl.exe。但是,该 EXE 位于我的 C:\Windows\System32 文件夹中。到底是怎么回事?
windows - 确定连接到 USB 大容量存储设备的父设备链
我正在开发一个连接到 USB 大容量存储设备的 WDM 过滤器驱动程序。我需要能够浏览父设备和祖设备链(即集线器)并检查供应商和产品 ID。
使用 IoGetDeviceAttachmentBaseRef(),我可以访问大容量存储设备的 PDO,但我已经触及 USB 大容量存储设备堆栈的底部。所以现在我需要访问父 USB 集线器堆栈,但我不确定如何做到这一点。
如果您遍历大容量存储设备的 PDO 中的 NextDevice 列表,您可以看到列出的集线器的 PDO,但这样做并不能告诉我集线器是大容量存储设备的父/祖父。
windows - 何时使用 Wave 可扩展格式?
我正在编写一个包含读取和写入波形文件的音频库,并且我了解三种可能的波形文件格式之间的区别,但是在处理单声道或立体声 PCM 数据时,不清楚何时使用可扩展格式。我一直使用它作为我的主要参考,它清除了何时使用可扩展格式的明显案例。但是,该链接提到,如果 PCM 数据大于 16 位,则应使用可扩展格式,但是当我尝试使用 Audacity 导出 24 位或 32 位音频时,他们没有使用可扩展格式。
我没有在规范中找到任何提及在这种情况下应该优先使用可扩展格式,或者是否所有文件都应该使用可扩展格式。现代图书馆甚至会支持旧格式吗?我应该在所有情况下使用可扩展格式简化文件写入吗?
更新:
我从 Microsoft 找到了有关格式块的资源。据我了解,PCM 数据可以使用可扩展格式或 18 字节格式,但旧的 16 字节格式已过时。有谁知道您是否可以在 Windows 机器上播放带有 16 字节标头的 WAVE PCM 文件?带有 16 字节标头的 24 位 PCM 怎么样?这是我在网上找到的另一个极端案例。我没有 Windows 映像,所以我无法自己检查。
windows - 有什么方法或地方知道如何在 VS 2013 中构建 WDM?
我已经了解了rootkit 然后,我尝试练习示例代码,但是,我无法构建wdm驱动程序(只能KMDF)所以,我搜索了很多网站,但文档已经过时了
你能告诉我用VS 2013学习的方式或一些好地方吗?
(或者,使用 KMDF 的 rootkit 教程的好例子)
windows - 磁盘卷过滤器驱动程序导致 BSOD 0x7b
我为 MS Windows 开发磁盘卷加密驱动程序“xxxx_aes”,其实现类似于 WDM 过滤器驱动程序。它作为“存储卷”类 {71A27CDD-812A-11D0-BEC7-08002BE2092F} 的“LowerFilters = xxxx_aes fvevol rdyboost”安装在系统中。
HKLM\CurrentControlSet\System\Services\xxxx_aes 条目包含:Start=0;类型=1;标签=7;组 =“Pnp 过滤器”。正常的设备堆栈是:
它适用于 XP x32,甚至 Win8 x32/x64 和 Win10 x64。它不适用于某些装有 Win7 x64 的 PC,例如在安装另一个驱动程序后(可能是 CryptoPro,但事实并非如此)。系统在启动到 BSOD 时崩溃并出现错误:
括号中的参数 1 是 UNICODE_STRING 的地址,其名称为不可访问的引导设备:
它是驱动器“c:\”或\Device\HarddiskVolume2 的别名,已经加密,应该被驱动程序xxxx_aes 挂钩。调用堆栈中的最后一次调用指向“nt”模块函数,而不是任何驱动程序。
如果在 WinDbg 中安装断点“bu nt!PnpInitializeBootStartDriver”(在调用堆栈中找到),则可以获得启动顺序中所有模块的列表(如 (WCHAR**)(@rcx+8) 处的参数):
在加载 disk.sys 后,这里发生了 BSOD。我看到 DriverEntry 调用我的驱动程序,但没有看到 PnP 的 AddDevice 调用。所以,驱动程序真的不起作用。
在这个系统中会发生什么?提前致谢。
PS。我用“swiss-knife”工具制作了 Linux live-CD,包括注册表编辑器“fred”和用于加密卷的 FUSE-driver(读/写)。所以,我可以探索和编辑崩溃的系统..
c++ - 创建面向 WinXP x64 的 WDM 网络驱动程序 - 从哪里开始?
我下载了带有所有 C++ 安装选项的 Visual Studio Community Edition。然后我安装了针对 WinXP 的WDK 。但是,似乎 VS 无法识别这一点,因此新项目向导中没有创建 WDM 驱动程序的选项。
我之所以依赖这样的选项,是因为我之前没有创建过驱动程序,而且我不太了解它是如何发生的以及我可以使用哪些工具。我希望 VS 自动化 IDE 能帮助我解决这个问题。
在这种情况下如何开始有什么想法吗?
编辑:也许社区 VS 版本不支持创建驱动程序?
windows - 使用什么版本的 NDIS,甚至可能使用什么 WDK?
所以我正在移植一个为 NDIS 5.0 编写的旧的 32 位 NIC 驱动程序。我的目标是(如果可能的话)从 XP 开始的所有 64 位 Windows 版本。使用什么 NDIS 版本?根据我的阅读,它应该小于 6,因为那时 Windows XP x64 将不受支持 - 这是真的吗(我想知道,因为 x64 版本的 XP 不是那么传统)?
还有要使用什么 WDK 版本 - 我正在考虑 7.1,但我不知道甚至更新的 8.0、8.1 和 10 是否支持 Windows XP x64 NDIS?
我问是因为从我看到的 NDIS 版本都非常不同,我不想再次从头开始重新编写我的驱动程序。
还有一个我想知道的问题 - NDIS 与 WDK 有什么关系?WDK 是否也有版本(对不起,如果问题很愚蠢,但我以前从未开发过驱动程序)?我看到有 NDIS-WDM 驱动程序。