我们常用的显示器接口有HDMI、VGA等接口,这些接口是直接在显卡上的,当显示器插在显卡上,显卡就直接可以将显示信号输出到显示器了。
关于USB显示器跟HDMI之类的显示器有本质区别,我们需要实现的有两个:
- 在USB上插入一个显示器,怎么让windows系统能识别到显示器
- 如何让USB显示器显示对应的屏幕内容。
WDDM驱动框架
WDDM(Windows Display Driver Model)是微软最新的显卡驱动模型,最先被运用在Vista系统中,它提供了一系列函数原型,显卡驱动需要实现其中的函数,在系统运行过程中,Windows操作系统会根据程序的请求调用对应的函数。
WDDM驱动的框架主要如图1所示。由图可知,WDDM中的显卡驱动主要分成两部分:用户态驱动(User-Mode Display Driver)和内核态驱动(Display MiniportDriver)。其中用户态驱动以动态链接库的形式存放在system32文件夹中,当程序调用D3D函数时,系统会自动加载用户态驱动到自己的运行空间中。用户态驱动中的函数大致和Direct3D中的API是一一对应的关系,因此每次程序调用显卡相关的函数(如3D函数),一般会被D3D Runtime转换到用户态驱动中对应的函数中,由用户态驱动完成实际的功能。而内核态驱动则在系统启动时由系统自动加载到内核态内存空间中,它主要用于实现与显卡硬件之间交互,如显存的分配、显卡中断处理等。

图1 WDDM框架示意图
WDDM与Dxgknrl的交互分析
关于WDDM框架的分析,我们需要从入口函数分析,我们就拿我们比较熟悉的win10 QXL驱动来进行底层逆向分析,win10的QXL驱动是WDDM Displayonly的驱动,其与Dxgknrl的通信方式及获取入口地址的原理与常规WDDM是一致的,我们逆向的到的原理如图2所示。


本文介绍了WDDM驱动框架的组成与工作原理,包括用户态驱动和内核态驱动的作用,以及WDDM与Dxgkrnl之间的交互过程。还详细分析了通过过滤驱动实现虚拟显示器的方法。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



