编写虚拟设备的起点

10
我希望写出类似于DaemonTools的软件:它向系统展现为一个真实设备(以前的例子中是DVD-ROM),但它实际上从文件中读取数据。我的需求不仅限于DVD-ROM。首要目标是Windows的游戏手柄/游戏板。
我是一名Web开发人员,所以我不知道该从哪里开始这样一个项目。我相信它将需要用C/C++编写,但除此之外,我不知道从哪里开始。
是否有人尝试过这样的事情,并能给我一些起步提示?

你如何以这种方式使用游戏手柄?一旦你加载了游戏应用程序等,你就不再有任何焦点或控制虚拟(据我所知)游戏手柄了吧? - Matt Donnan
如果您可以通过局域网/互联网/TCP从另一台机器控制“游戏手柄”,那该怎么办? - Nicu Surdu
理论上来说这是可能的,然而开发虚拟解决方案的主要原因是为了节省产品硬件成本等,但在这种情况下,如果您没有一个游戏手柄,您不需要购买它,但需要购买另一台电脑来运行它。我很欣赏这只是一个项目,但在编写代码之前考虑实现方式是值得的:) - Matt Donnan
1个回答

16

大多数驱动程序都是用C或C++编写的,所以如果您不太熟悉这些语言,建议在开始之前先熟悉它们。Windows编程使用了许多有趣的快捷方式,对于初学者可能会感到困惑 - 例如 PVOIDs (typedef void* PVOID) 和 LPVOIDs (typedef void* far LPVOD;)。您需要对指针和结构等概念非常熟悉,因为您将经常使用它们。我建议先编写一个简单的win32应用程序,来练习掌握Windows C/C++编程风格。

接下来,您需要使用 Windows Driver Kit - 特别是,您需要它来为Windows编写驱动程序。在这个阶段,我的建议能力实际上取决于您要做什么以及您可用的硬件等情况,或者您是否真的正在使用硬件。您需要知道如何操作您的硬件,并从中选择适当的驱动程序编写方式 - 根据您需要实现的内容,有几种不同类型的驱动程序可供选择,也许您可以插入其中一种。

Windows驱动程序开发工具包包含大量示例,其中包括实现虚拟烤面包机的驱动程序。这些示例可以为您提供起点。
强烈建议您在虚拟机中进行测试。如果您的驱动程序成功构建,但导致运行时错误,那么如果您处于内核模式下,则可能会完全崩溃Windows。因此,通过能够还原虚拟机,您可以避免一些痛苦,同时也不必等待系统重新启动。这也将使调试更容易,因为可以使用虚拟串行电缆。
这是一项相当大的任务,因此在开始之前,我建议您更全面地研究Windows开发 - 首先检查您是否可以使用Windows API完成它,然后查看用户模式驱动程序框架,最后只有在必要时才查看内核级别的内容。

4
这类问题的很多答案都是“不要”。尽管这样做可能不明智,但你的回答非常具有信息性。 - John Dood
2
谢谢提到微软驱动程序示例虚拟烤面包机,我在其中找到了一个名为plug.exe的程序,可以创建幻影设备,但我找不到它的源代码(https://github.com/microsoft/Windows-driver-samples/tree/master/general/WinHEC%202017%20Lab/PlugInToaster)。有人知道如何创建幻影设备吗? - Juan Rojas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接