win10虚拟显示器开发

2017.7.7

最近在做虚拟化,需要在虚机上虚拟出一个显示器,我使用的虚机是windows10,虚机里面有一张透传显卡(可看做是物理显卡),我尝试过一些方法,比如编写一个虚拟的WDDM显卡驱动,然后在显卡驱动上接上一个显示器,该方法是有效的,可以成功虚拟出一个显示器,但是在虚拟显示器上渲染数据使用的渲染引擎没有用到透传显卡,在性能上达不到我的要求,所以只好放弃用这种方法。

 

于是,通过阅读MSDN上的WDDM开发文档,找到了Indirect display driver开发框架,比较符合我的要求,它好像是微软在2016年年底出来的一个框架,比较新,所以除了微软本身外,根本找不到任何开发资料,开发过程中需要问题只能自己一点点去尝试,比较痛苦,微软有提供的资料如下:

 

开发文档: https://docs.microsoft.com/zh-cn/windows-hardware/drivers/display/indirect-display-driver-model-overview

 

在开发过程中遇到一些问题,需要注意的如下:

(1)该驱动为用户态模式驱动,如果想要将图片数据发送给底层硬件,需要先转发给内核态驱动,由内核态驱动同硬件交互。

(2)该驱动不能作为虚拟驱动存在,他需要安装在一个设备上,否则IddCxAdapterInitAsync函数会返回失败。

(3)该驱动貌似只能装在usb设备上,我之前尝试装在PCI设备上,虽然系统上会出现一个虚拟显示器,但是只要你一使用这个显示器,“桌面窗口管理器”消耗cpu资源会迅速上升,而且IddSampleMonitorAssignSwapChain都不会被操作系统调用。

 

如下是我实现的双屏效果:

win10虚拟显示器开发_第1张图片

 

如果有人用到这个框架,在开发过程中有遇到新的发现,请留言讨论。

 

 

你可能感兴趣的:(windows驱动)