【发布时间】:2015-05-17 00:23:38
【问题描述】:
我正在开发一个应用程序,该应用程序需要管理(访问、创建、写入、读取)远程服务器上的文件,并将存储作为虚拟驱动器/卷安装在计算机上的指定位置(例如 H :),例如本地 USB 设备。
在 Linux 上,使用 FUSE 可以做这样的事情。但是,在 Windows 上,没有等效的方法,唯一的方法是使用驱动程序。
所以我开始使用 WDF 创建一个驱动程序,但我一开始就遇到了 inf 文件和满足我需要的最小代码调整的问题。
我查看了许多官方驱动程序示例(例如nonpnp 示例)以及互联网上的许多各种资源(例如OSR Online),但我无法使其正常工作。
我遵循的步骤
为了启动我的驱动程序项目,我在 Visual Studio 2013 中创建了一个内核模式驱动程序 (KMDF)。它是一个模板项目。 我能够用这个项目设置我的整个测试环境(测试机器 + 签名的东西 + 部署配置),所以这些东西工作正常。
但是,模板项目不能很好地满足我的需求:我需要一个桌面应用程序,它将与(仅软件)驱动程序交互,并要求驱动程序安装/卸载卷并提供详细信息(连接) 每个卷的信息。基于此,必须更改初始 inf 文件,因为它是用于硬件驱动程序(等待插入真实设备),而这里不是这种情况。 inf文件的变化也意味着模板初始代码的一些变化。 但是,由于我开始修改 inf 文件和代码以满足我的最低需求,因此在部署步骤期间驱动程序安装失败。
这是我得到的错误:
1>------ Début de la génération : Projet : cadwd Package, Configuration : Win7 Debug Win32 ------
1> ..........................
1> Signability test complete.
1>
1> Errors:
1> None
1>
1> Warnings:
1> None
1>
1> Catalog generation complete.
1> C:\project\driver\Win7Debug\cadwd Package\cadwd.cat
1> Done Adding Additional Store
1> Successfully signed: C:\project\driver\Win7Debug\cadwd Package\cadwd.cat
1>
1> Deploying driver files for project "C:\project\driver\cadwd Package\cadwd Package.vcxproj". Deployment may take a few minutes...
1>C:\Program Files (x86)\Windows Kits\8.1\build\Win32\ImportAfter\DriverDeployment.targets(69,9): error : Driver Deployment Task Failed: Default Driver Package Installation Task (possible reboot)
========== Génération : 0 a réussi, 1 a échoué, 1 mis à jour, 0 a été ignoré ==========
这是最少的代码:https://github.com/gupascal/StackOverflow-Q201503-1。第一次提交是VS项目生成的初始代码, 第二个显示了我的测试的当前状态(但是,我做了很多小测试[没有一个有效],我不能在这里列出所有这些)。
谁能帮我解决这个问题?我花了很多时间在这上面,我真的被困住了。
感谢您的帮助,
纪尧姆
【问题讨论】:
-
您是否检查过文件系统微型过滤器驱动程序是否满足您的需求? (查看msdn.microsoft.com/en-us/library/windows/hardware/ff540402 和code.msdn.microsoft.com/windowshardware/…)。如果这对您来说是一种可能的方式,我可能会给您更多提示(我最近写了一个小型迷你过滤器驱动程序作为概念证明)
-
虽然文件系统驱动程序是内核模式驱动程序,但它是一种非常特殊的情况;甚至单独记录,IIRC。我不确定 KMDF 模板是否是一个明智的起点。另外,您是否考虑过 iSCSI 能否满足您的需求?
-
感谢您的回答。首先,不,iSCSI 不能满足我的需求,因为我必须通过 HTTPS 与 API 通信(而且我无法更改服务器端)。在 KMDF 和文件系统微型过滤器驱动程序之间进行选择是我在项目中遇到的第一个困难。当时,我似乎误解了 FS mini 过滤器的工作原理,这可能导致我做出了错误的选择。 (1/2)
-
通过重新审视 FS 过滤器,我发现可以通过从 preop 例程返回 FLT_PREOP_COMPLETE 来完成一个 I/O 操作(如果我错了)而不是简单地将 I/O 操作传递给下一个过滤器。其次,必须将 FS 过滤器驱动程序附加到卷,但在我的情况下,我需要创建一个虚拟卷。事实是,我不知道怎么做,也不知道在哪里做。这应该在驱动程序中还是在用户应用程序部分中完成?谢谢。 (2/2)
-
你好,@RainerSchaack。我现在正在尝试部署我的 fs 过滤器驱动程序,但在部署它时遇到了一些问题:
Driver Preparation (x86) (possible reboot): Fail。在 VS 中,在部署属性的“驱动程序安装选项”部分,我选择了“安装和验证”,但我不确定它是否是 fs 驱动程序部署的正确选项。你能帮我吗?另外,您能否在我的最后评论中给我一些关于我的其他问题的提示?感谢您的帮助。