编码虚拟设备的起点

时间:2012-01-19 10:23:23

标签: windows driver virtualization

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

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

有没有人尝试过这样的东西,可以给我一些启动技巧?

1 个答案:

答案 0 :(得分:8)

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

然后你的下一个停靠点是导航Windows Driver Kit - 具体来说,你需要它来构建Windows的驱动程序。在这个阶段,我的建议能力实际上取决于你正在做什么和你有的硬件等,或者你是否真的使用硬件。你需要知道如何驱动你的硬件,你需要选择一种合适的编写驱动程序的方法 - 根据你需要实现的目的,有几种不同类型的驱动程序,你可以插入其中之一。

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

我强烈建议您在虚拟机中对此进行测试。如果您的驱动程序成功构建,但导致运行时错误,那么如果您处于内核模式,结果可能会完全崩溃Windows。因此,如果您损坏虚拟机,并且无需等待系统重新启动,则可以避免一些痛苦。它还可以使调试更容易,因为可以使用虚拟串行电缆。


这是一项相当大的工作,所以在你开始之前,我会更彻底地研究Windows开发 - 先检查你是不是可以使用Windows API,然后查看用户模式驱动程序框架,然后最后,只有在需要时,查看内核级别的内容。