(2) API Hook技术在实际截屏时,采用API函数实现,截取DDB位图,必须经过一次DDB到DIB的转换;而驱动技术直接从其管理的DIB位图(表面)中将截取区域的图形数据拷贝到应用程序,显著的降低了一次截屏的时间消耗
  计算机屏幕图像的截取在屏幕的录制、计算机远程控制以及多媒体教学软件中都是关键术,基于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把这些请求发送到相应的图形驱动程序如,显示器驱动程序,通信流如图现将该技术详细解释如下: 
   
  http://images.cnblogs.com/cnblogs_com/niukun/a .JPG(图片地址) 
  (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技术相当;但驱动技术是一种标注技术,为微软公司所推荐 
  (3) 如果屏幕图形小区域范围变化较快,屏幕变化区域矩形坐标R1、R2、R3……、Rn相继到达,由于一次截屏时间消耗降低,区域矩形坐标叠加的概率变小,这样屏幕变化区域及时的得到了处理,不仅增加了连续性,而且截屏时间消耗和产生的数据量一般不会出现峰值,这也是这种技术的优越之处 
  经过以上对比,无论是做远程桌面还是屏幕录制,基于MirrorDriver的屏幕截取将会是一个不错的选择,无论从性能占用资源的大小(主要是cpu),取得的数据量来说都要优于Hook 
  最近在做远程桌面的传输,所以有必要研究一下Mirror,这项技术在很多软件中都有应用但是开源的driver我还没有看见过,因为没有精力去编写所以才用网上的免费的driver同时也提供了api文档 
  driver内部实现的原理大致就是把显示输出拷贝到一个缓冲区当中,并且记录每次屏幕更新的矩形区域根据这些输出,应用程序就很容易得到缓冲区中的数据了

转载于:https://www.cnblogs.com/wangjixianyun/archive/2013/04/11/3014645.html

hook 驱动 截屏相关推荐

  1. Linux系统fb驱动信息,Linux下利用fb驱动截屏

    程序主要是利用/dev/fb/0这个设备节点./dev/fb/0代表了LCD的FrameBuffer缓冲区驱动程序,操作该驱动,即相当于操作LCD的FrameBuffer.所以,由此出发,通过读取/d ...

  2. amd一键超频怎么用_AMD新版显卡驱动为“肾上腺素 2019”:支持一键超频,语音截屏...

    原标题:AMD新版显卡驱动为"肾上腺素 2019":支持一键超频,语音截屏 熟悉AMD显卡的各位肯定记得,从2014年开始,AMD每年年末都会为用户带来一款年度版驱动更新,而这种年 ...

  3. Anti-Screen Capture(Prevent Screen Captures)截屏与反截屏

    1.数字图片使用类似与动画的方式显示,每次显示的是数字的一部分,当动态显示的时候人眼是可以分辨出具体数字的.但是截图的话就只能截取一部分,参考: cups.cs.cmu.edu/soups/2007/ ...

  4. windows截屏录屏 (D3d) 游戏黑屏 解决思路

    先随手记下来,以后补代码,整排版 最近忽然想折腾点游戏辅助(w a i g u a..)自己玩玩 最简单直接的思路就是获得游戏画面,然后判断,然后干一些事情了. 可是搜出来的几个windows截屏方法 ...

  5. android关于截屏,关于android截屏知识的学习

    最近要做手机截取当前屏幕的开发,发了大半天时间在网上找了很多资料,终于有了一个大概的头绪和思路,若有问题望指点,谢谢! 目前而言个人了解android有三种截屏方法: 1.android SDK提供的 ...

  6. 泰克示波器截屏软件-Tektronix示波器上位机-OpenChoice安装。示波器波形发文章论文

    官网下载速度太慢总中断,附个人下载链接:https://download.csdn.net/download/Mark_md/12556223 u1s1,这玩意就是个截屏软件,并不能通过电脑对示波器的 ...

  7. Android实现截屏方式

    本文介绍了Android 实现截屏方式整理,分享给大家.希望对大家有帮助 可能的需求: 截自己的屏 截所有的屏 带导航栏截屏 不带导航栏截屏 截屏并编辑选取一部分 自动截取某个空间或者布局 截取长图 ...

  8. selenium 无头模式截屏

    原文链接: selenium 无头模式截屏 上一篇: wecode 生日贺卡 flask 服务端 下一篇: wecode 图片查看组件 截取百度首页,保存为图片 砸死ubuntu环境中,可能会出现中文 ...

  9. esp32 spi 驱动 oled 屏显示来自 PC 的画面

    esp32 spi 驱动 oled 屏显示来自 PC 的画面 实验代码 gayhub 实验源码 设备及运行环境 装有python的电脑 Python 3.8.2 (tags/v3.8.2:7b3ab5 ...

最新文章

  1. [转]WEB开发者必备的7个JavaScript函数
  2. python3网上学习资源汇总
  3. mysql 小数点后几位不足补0初始化
  4. 全排列函数、组合函数
  5. tomcat session失效时间
  6. 撩开Docker的面纱
  7. 使用Redis的有序集合实现排行榜功能
  8. 74ls161中rco是什么_什么是催化燃烧?如何选择催化燃烧设备?RCO和RTO有什么关系?...
  9. 控制流程之while循环
  10. Android学习Matrix对称变换5
  11. 【信息论】信源与信源熵(一)
  12. svn连接工具tortoiseSVN
  13. 电容式麦克风和动圈式麦克风的工作原理
  14. uniapp发行为小程序分享转发功能
  15. 自建 IPA 分发平台
  16. 9个offer,12家公司,35场面试,计算机应届毕业生求职之路
  17. java面试所问到的问题和资料整理
  18. Win10提示“PL2303HXA自2012已停产,请联系供货商”的解决方法
  19. 计算机算出幽默的公式,幽默(二)段子的基本公式
  20. 毕业生社保、档案和户口详解 2

热门文章

  1. tomcat的部署及session绑定反代
  2. Oracle数据库中调用Java类开发存储过程、函数的方法
  3. mysql 获取自增id的值的方法
  4. 《信息系统项目管理师软考辅导——3年真题详解与全真模拟》主要创新点、关注点...
  5. lt;备份gt;10月18日 DNS
  6. 从B 树、B+ 树、B* 树谈到R 树
  7. 好程序员web前端分享数组及排序、去重和随机点名
  8. 关于Flutter初始化流程,我必须告诉你的是...
  9. 笔试题——JavaScript事件循环机制(event loop、macrotask、microtask)
  10. lnmp、lamp、lnmpa一键安装包