编码虚拟设备的起点

Nic*_*rdu 8 windows virtualization driver

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

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

有没有人尝试这样的东西,可以给我一些开始的提示?

小智 8

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

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

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

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


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

  • +1对此类问题的很多答案都是“不要”。尽管这样做可能是不可取的,但您的回答非常有用。 (2认同)
  • 感谢您提到微软驱动程序示例虚拟烤面包机,我在其中找到了一个创建幻像设备的程序plug.exe,但我找不到其源代码(https://github.com/microsoft/Windows-driver-samples/tree/主/常规/WinHEC%202017%20Lab/PlugInToaster)。有谁知道如何创建幻象设备? (2认同)