编码虚拟设备的起点

我想写一些类似于DaemonTools的软件:一种将自身作为一个真实设备呈现给自己的软件(前面例子中的DVD-ROM),但是它从文件中读取数据。 我的要求不限于DVD-ROM。 第一个目标是Windows的游戏杆/游戏手柄。

我是一个Web开发人员,所以我不知道从哪里开始这样一个项目。 我相信它必须用C / C ++编写,但除此之外,我不知道从哪里开始。

有没有人尝试过这样的事情,可以给我一些启动提示?

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

然后,您的下一个端口就是浏览Windows驱动程序工具包 – 具体而言,您需要为Windows构建驱动程序。 在这个阶段,我的建议能力确实取决于你在做什么以及你可以使用的硬件等,或者你是否真的在使用硬件。 您需要知道如何驱动您的硬件,并从那里您需要选择一个适当的方式来编写驱动程序 – 有几种不同类型的驱动程序,取决于您需要实现什么,它可能是你可以插入其中之一。

Windows驱动程序工具包包含相当多的样本,包括实现虚拟烤面包机的驱动程序。 这些应该为您提供起点。

我强烈建议你在虚拟机上做这个测试。 如果您的驱动程序成功构建,但会导致运行时错误,那么如果处于内核模式,则结果可能完全崩溃。 因此,如果您损坏了虚拟机,您将可以通过恢复虚拟机来节省自己的一些痛苦,并且不必等待系统重新启动。 由于可以使用虚拟串行电缆,因此也会使调试变得更加容易。


这是一个相当大的工作,所以在开始之前,我会更深入地研究Windows开发 – 检查你不能先用Windows API来做,然后看看用户模式驱动框架,最后如果你需要的话,看看内核级别的东西。