Windows图形驱动级远程屏幕传输的实现

Windows RDP 3种图形加速方案对比:NVIDIA补丁 vs VNC vs TeamViewer 性能实测 本文深入评测了Windows环境下三种主流远程图形加速方案:NVIDIA OpenGL RDP补丁、VNC协议和TeamViewer。通过性能实测对比,分析了各方案在3D图形处理、CAD设计等专业场景下的表现,为远程办公用户提供选型参考。NVIDIA补丁展现出最佳OpenGL加速性能,而TeamViewer则在易用性上占优。 阅读详情
Windows图形驱动级远程屏幕传输的实现
2008年04月28日 星期一 下午 04:35

计算机屏幕图像的截取在屏幕的录制、计算机远程控制以及多媒体教学软件中都是关键术,基于Windows操作系统有多种截屏方法,研究的重点集中在如何快速有效的截取DBI(Device-Independent Bitmap)格式的屏幕图形数据。现在商业软件流行的截屏技术主要采取的Api Hook技术,但这种技术一次截屏仍有较大的时间消耗,这样就对运行软件的硬件仍有较多的限制,而且是一种非标准的技术,不为微软公司所推荐。

1截屏技术

1.1使用api hook技术

         使用api hook技术截屏基于一下的原理;多数屏幕图形的绘制都是通过调用用户态gdi32.dll中的绘图函数实现的,如果利用api hook技术拦截系统中所有对这些函数的调用,就可以得到屏幕图形刷新或变化的区域坐标;然后使用api函数bitblt将刷新或者变化后的屏幕区域的ddb格式的位图拷贝到内存中,接着使用函数getbits将ddb位图转换为dbi位图,最后压缩、存储或者传输。

         这种方案只有捕捉到变化,才进行截屏。这样每次截屏都是有效的操作。每次(第一次除外)仅截取了栓新或变化部分,从根本上解决了数据量大的问题。但是这种技术仍然有一下缺点:1实际截屏采用的api函数,截取的是ddb位图,要经过一次格式转换,耗时较大。2如果屏幕变化区域矩形的坐标r1、r2、……rn相继到达,为了不是屏幕变化的信息丢失,通常不是逐个截取,而是将矩形坐标合并,这样就可以截取并未变化的区域,不经增加截屏的时间消耗,而且产生冗余数据。3该技术不支持directdraw技术,由于应用程序可能使用directdraw驱动程序进行直接操纵显示内存、硬件位块转移,硬件重叠和交换表面等图形操作,而不必进行gdi调用,所以此时api hook技术将失去效用,不能捕捉屏幕变化。4api hook技术在屏幕取词,远程控制和多媒体教学中都有实际的应用,但是这种技术是一种非标准的技术,微软公司并不推荐使用。

1.2 使用图形驱动技术

该技术的原理:应用程序调用win32 gdi 函数进行图形输出请求,这个请求通过核心模式gdi发送。核心模式gdi把这些请求发送到相应的图形驱动程序。如,显示器驱动程序,通信流如图。现将该技术详细解释如下:

(1)显示器驱动输出一系列设备驱动程序接口DDI(Device Driver Interface)函数供GDI调用。信息通过这些入口点的输入/输出参数在GDI和驱动程序之间传递。

(2)       在显示器驱动加载时,GDI调用显示器驱动程序函数DrvEnableDriver,在这里我们向GDI提供显示器驱动支持的,可供GDI调用的DDI函数入口点,其中部分时将要Hook的图形输出函数。

(3)       在GDI调用函数DrvEnableDriver成功返回后,GDI调用显示器驱动的DrvEnablePDEV函数,在这里可以设置显示器的显示模式,然后创建一个PDEV结构,PDEV结构是物理显示器的逻辑表示。

(4)       在成功创建PDEV结构之后,显示驱动为视频硬件创建一个表面,该表面可以是标准的DIB位图管理表面,然后驱动程序使该表面与一个PDEV结构相关联,这样显示驱动支持的所有绘画操作都将在该DIB位图表面上进行。

(5)       当应用程序调用用户态GDI32.DLL中的绘图函数发出图形请求时,该请求将图形引擎通过相应的DDI函数发送到显示驱动,显示驱动程序将这次图形变化事件通知应用程序。

(6)       应用程序接受到通知后,调用函数ExtEscape发出一个请求,并通过参数传递一个缓冲区Buffer,图形引擎调用DDI函数DrvEscape处理应用层的ExtEscape调用,将变化部分的图形数据从其创建的表面拷贝Buffer,这样数据就从核心层图形驱动传到应用层。

(7)       应用程序接收到的图形数据已是DIB标准格式,所以可以直接进行压缩传输或储存。

1.3图形驱动技术的特点

         上面叙述了采用图形驱动实现屏幕实现截屏的原理和过程,可以看出这种技术涉及核心图形驱动的编写,实现上较为复杂,而其具备的优点主要为:

(1)       驱动技术只截取变化的屏幕区域,这一点与API Hook技术相当;但驱动技术是一种标注技术,为微软公司所推荐。

(2)       API Hook技术在实际截屏时,采用API函数实现,截取DDB位图,必须经过一次DDB到DIB的转换;而驱动技术直接从其管理的DIB位图(表面)中将截取区域的图形数据拷贝到应用程序,显著的降低了一次截屏的时间消耗。

(3)       如果屏幕图形小区域范围变化较快,屏幕变化区域矩形坐标R1、R2、R3……、Rn相继到达,由于一次截屏时间消耗降低,区域矩形坐标叠加的概率变小,这样屏幕变化区域及时的得到了处理,不仅增加了连续性,而且截屏时间消耗和产生的数据量一般不会出现峰值,这也是这种技术的优越之处。

经过以上对比,无论是做远程桌面还是屏幕录制,基于MirrorDriver的屏幕截取将会是一个不错的选择,无论从性能占用资源的大小(主要是cpu),取得的数据量来说都要优于Hook。
最近在做远程桌面的传输,所以有必要研究一下Mirror,这项技术在很多软件中都有应用。但是开源的driver我还没有看见过,因为没有精力去编写。所以才用网上的免费的driver同时也提供了api文档。
driver内部实现的原理大致就是把显示输出拷贝到一个缓冲区当中,并且记录每次屏幕更新的矩形区域。根据这些输出,应用程序就很容易得到缓冲区中的数据了。
代码还在调试,等写完了,上源码!!!

Delphi实现的远程屏幕监控系统DGScreenSpy完整源码项目 看似简洁,实则暗藏巨大性能陷阱。其底层调用向UI线程投递消息,但UI线程必须执行完整消息泵循环(→→)才能处理该消息。当UI线程正忙于高频重绘时,可能排队数百毫秒,导致采集线程在调用处无限期挂起——这直接违反实时性要求。// ❌ 危险示例:Synchronize导致采集线程阻塞begin// 此处若UI线程卡顿,DoCapture将永久等待procedurebegin// 将FBitmap赋值给主窗体的TImage.Picture.Bitmap。 阅读详情

相关推荐

构建MFC和VC驱动的屏幕监控及远程控制

本文还有配套的精品资源,点击获取 简介:屏幕监控和远程控制技术在IT领域具有广泛应用,尤其是在系统管理和企业协作中。本项目利用MFC和VC开发环境,通过Windows API函数实现屏幕监控和远程控制功能。技术要点包括屏幕图像捕获与传输、键盘鼠标事件模拟以及网络通信。此外,为保证性能,建议将服务器与客户端部署在不同的PC上,并实现网络编程以及多线程技术。系统提供可调整的性能...

weixin_35916518的博客 899

易语言编程-驱动级反截图反屏录保护窗口功能技术

它的作用: 是为了防止一些游戏公司在游戏时候,偷偷的截图或者录屏采集到游戏服务器,然后人工复查是否使用了作弊软件用。 因为很多游戏公司现在判断追封,会采用截屏录屏当时玩家正在游戏时候电脑屏幕或者游戏窗口上是什么情况, 如果看见了你的屏幕上的辅助程序,或者游戏屏幕里的各种透视,画线画框,就直接追封账号。

hzw320的博客 2570

C# 的远程协助 源码

C#的远程协助 可以通过远程电脑进行 控制和操作 于QQ远程协助很相似 开源代码 希望对你有帮助

(转)屏幕录制,远程桌面传输,基于Windows图形驱动的屏幕截图技术

计算机屏幕图像的截取在屏幕的录制、计算机远程控制以及多媒体教学软件中都是关键术,基于Windows操作系统有多种截屏方法,研究的重点集中在如何快速有效的截取DBI(Device-Independent Bitmap)格式的屏幕图形数据。现在商业软件流行的截屏技术主要采取的Api Hook技术,但这种技术一次截屏仍有较大的时间消耗,这样就对运行软件的硬件仍有较多的限制,而且是一种非标准的技术,不为微

4822

MirrorDriver 截屏

实现win7及以下系统截屏

ScreenSpy[国外的屏幕传输]

这是一个 国外的 国外的屏幕传输 delphi代码...

为什么网易 UU 远程无法从 Windows 控制 Mac?完整解析 + 替代方案推荐

项目macOSWindows系统安全策略严格(限制驱动访问)相对开放远程协议VNC / ARDRDP / 自定义驱动UU远程主机❌ 无✅ 有可远程控制✅ Mac→Win✅ Win→Win👉 所以,UU 远程不是坏了,也不是你设置错了,而是它根本不支持 macOS 作为被控端。使用场景推荐方案家里 Mac + 办公室 Win向日葵远程 ✅想自建服务器RustDesk ✅双系统 MacUU 远程(控制 Windows 分区) ✅仅苹果设备间。

一勺菠萝丶的博客 5782

易语言-Mirror Driver 驱动截图,可制作远程协助、屏幕录像等

使用之前先安装Mirror Driver,打开 安装驱动.bat 即可。 注意:此驱动只支持32位系统!所以没有什么实际价值 为什么不支持64位,一、驱动和DLL是32位的,二、64位需要签名才能安装驱动

Windows上屏幕捕捉功能的三大API层级 GDI

层级API/技术核心原理优点缺点典型应用层级一 (传统)GDIBitBltCPU像素复制兼容性好、简单性能差、无法捕捉硬件加速内容老旧VNC, inletex, 简单截图工具层级二 (现代)GPU纹理复制性能极高、效率高复杂、仅限Win8+TeamViewer, AnyDesk, Parsec, OBS(旧)层级三 (最新)GPU复制 + 安全封装安全、易用、窗口捕捉能力强需用户授权、仅限新版Win10+Teams, Discord, OBS(新), Windows录屏。

kanhao100的博客 4294

用DDK从Microsoft Mirror Driver截屏

从最开始DDK的安装到Microsoft Mirror Driver的编译,安装,到编写调用Microsoft Mirror Driver截屏的例子程序。最后有性能测试。

Mirror Driver 驱动截图,可制作远程协助、屏幕录像等

使用之前先安装Mirror Driver,打开 安装驱动.bat 即可。注意:此驱动只支持32位系统!所以没有什么实际价值。为什么不支持64位,一、驱动和DLL是32位的,二、64位需要签名才能安装驱动。@先锋小七。

VcXsrv深度解析:Windows上的X11协议实现与跨平台图形开发实践

当你在Windows环境下开发Linux应用,或者需要远程调试带图形界面的服务器程序时,是否曾为图形显示的兼容性问题而苦恼?传统的解决方案要么需要安装完整的虚拟机,要么依赖复杂的远程桌面配置,效率和体验都不尽人意。VcXsrv的出现,为这一难题提供了优雅的解决方案。 ## 技术架构:X11协议在Windows上的重生 VcXsrv本质上是一个完整的X Window System服务器实现,它将

gitblog_00617的博客 84

易语言远程屏幕差异传送源码

资源介绍:。源码实现传送即时屏幕图片,传送时具有屏幕图片差异检测。资源作者:。资源界面:。资源下载:。

实现屏幕监控的大体思路

屏幕监控简单说就是对进程的当前桌面进行截屏存成位图,然后将此位图数据传输到远程。 对桌面进行截图需要通过一系列Windows GDI API来完成的。 首先通过CreateDC,CreateCompatibleDC,CreateCompatibleBitmap,SelectObject等API将“DISPLAY”驱动器的设备上下文与位图句柄关联起来。 然后通过GetStockOb

未晚的专栏 2211

易语言远程屏幕差异传送源码.rar

易语言远程屏幕差异传送源码.rar

AutoLISP 学习 (一)

AutoLISP基本语法结构、语法 以括号组成表达式,左右括号一定要成对,单、双引号也要成对,例如: (defun c:hello() (princ "\nHello world!") (prin1) ) 表达式格式:(函数名 操作数 操作数 …),例如: (setq p1 (list 0 0)) (setq p2 (list 10 10)) (setq p3 (list 20 20)) ;;; CAD中画直线,经过p1 p2 p3 (command "LINE" p1 p2 p3 ""

m0_54575622的博客 2122

Windows远程连接(RDP)工作原理详解

RDP(Remote Desktop Protocol)是微软开发的专有协议,用于实现Windows系统的远程桌面连接功能。它允许用户通过网络连接到远程计算机,并像操作本地计算机一样使用远程计算机的图形界面。

m0_63331248的博客 2575

深入浅出PWM:用示波器带你理解占空比与滤波效果

本文通过示波器实测,深入浅出地解析了PWM(脉宽调制)的核心原理。从占空比与平均电压的关系入手,详细演示了RC及有源滤波器如何将数字方波“翻译”为平滑模拟电压,并探讨了PWM-DAC的精度、响应速度等关键设计考量,为硬件调试与电路设计提供了实用的实践指导。

weixin_29292431的博客 344

Windows 图形显示驱动开发-WDDM 1.2功能—桌面复制

Windows 8引入了新的 Microsoft DirectX 图形基础结构 (DXGI) API,使独立软件供应商 (ISV) 更容易地支持桌面协作和远程桌面访问方案。此类应用程序在企业和教育方案中广泛使用。这些应用程序有一个共同的要求:访问桌面内容以及将内容传输到远程位置的能力。Windows 8桌面复制 API 提供对桌面内容的访问权限。目前,没有 Windows API 允许应用程序无缝实现此方案。因此,应用程序使用镜像驱动程序、屏幕抓取和其他专有方法来访问桌面内容。

王马的博客 1168

用 Coze 打造纯自动化 AI 情报助手

本文将引导您逐步构建一个简易的AI情报助手,从提示词到工作流,再到卡片消息,详细讲解了如何利用Coze平台开发自动化工具。过程简单易懂,何不亲自动手一试?如果您对此类内容感兴趣,敬请关注本作者。未来,我将带来更多精彩的AI工具教程,助您迅速掌握各类AI应用。在这个AI时代,让您领先一步。t=O83A2AGI.NET AI 教程 震撼!用 Coze 打造纯自动化 AI 情报助手震撼!

xinzhaobuxuan的博客 2531

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1278

告别乱码!解决Windows终端与Ubuntu文件传输问题的终极方案

本文深入剖析了Windows与Ubuntu间文件传输产生乱码的根源,指出传统lrzsz方案对终端兼容性的依赖是主要问题。文章提供了三种终极解决方案:使用SCP/SFTP现代协议、图形化工具WinSCP以及通过SSHFS挂载远程目录,旨在帮助用户实现全场景、高可靠、零乱码的跨平台文件传输。

f0g1h2的博客 771

C++程序发生内存越界,一定会导致程序崩溃吗?详解内存越界

内存越界是否一定会导致程序崩溃吗?详解内存越界

dvlinker的技术专栏 1万+
上一篇: SetWindowsHookEx
下一篇: 开发虚拟串口驱动程序
Dcdu
博客等级 码龄21年 44粉丝 33原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值