| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2932 人关注过本帖, 2 人收藏
标题:在VC中直接写屏的方法
只看楼主 加入收藏
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1694
专家分:4282
注 册:2007-12-27
收藏
得分:10 
站在内核墙的不同的两侧我们得到的view是不同的。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2015-07-09 21:29
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1694
专家分:4282
注 册:2007-12-27
收藏
得分:0 
目态驱动也仍然是驱动。
操作系统上的抽象和硬件指令集的特权级别是两回事嘛。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2015-07-09 21:36
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
In Windows Server 2003 SP1, user-mode access to the \Device\PhysicalMemory object is not permitted. All forms of access (read, write) are refused when the \Device\PhysicalMemory object is accessed from a user-mode application. Access to the \Device\PhysicalMemory object is refused regardless of the user context (Administrators, Users, Local System, etc.) the application is running in.
Kernel-mode (driver) access to the \Device\PhysicalMemory object is unchanged for Windows Server 2003 SP1.

好像现代的windows在user-mode确实不能访问\Device\PhysicalMemory。不知道有没有其它方法访问整个内存。不能访问物理内存,用户态驱动很难实现。

[ 本帖最后由 wfoo 于 2015-7-9 21:45 编辑 ]
2015-07-09 21:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这个资料比较有趣,各方面都有,可以看看:http://baike.baidu.com/view/8187.htm

授人以渔,不授人以鱼。
2015-07-09 21:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
人眼和人头脑中的世界,不是真实图像。现代操作系统下用户程序看到的计算机设备,与此相似。在Windows NT中,Kernel把真实物理内存映射为虚拟内存,用户程序所谓的对内存寻址,那个地址是虚拟地址,它可能在物理内存中,也可能在磁盘交换页中;每个用户程序都有自己的虚拟内存,没有交集,互相也不能访问,要在进程之间共享数据,有系统提供的另外方法,总之不能直接访问物理内存。驱动程序最接近内核,权限也最大,这些程序要安装在系统中并允许运行,要经过系统的(比如证书)检查和用户的明确允许——其实很多问题,是用户乱放行造成的,现在的网站越做越复杂,请求的权限也越来越大,ActiveX之类之所以在Edge中不予支持,自然有道理。

授人以渔,不授人以鱼。
2015-07-09 22:02
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
回复 27楼 TonyDeng
我做个一个项目,在x86 linux框架上,用的驱动是全部在用户态,网卡,光钎,ipmi等的访问全部在用户态,包括线程的管理也是在用户态。进程间的共享使用的共享内存,这样整个程序基本上都不要进入系统态,可以提升性能。
2015-07-09 22:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
设备有提供访问协议,就可以在用户态下实现。这些控制和访问,在Windows下也可以。

授人以渔,不授人以鱼。
2015-07-09 22:25
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:0 
回复 29楼 TonyDeng
是直接操作硬件,调用协议最终还是会进入系统态,如果频繁的io操作很影响性能。
不过不是专用的项目,还是安装常规方法比较好。
2015-07-09 22:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用wfoo在2015-7-9 22:39:02的发言:

是直接操作硬件,调用协议最终还是会进入系统态,如果频繁的io操作很影响性能。
不过不是专用的项目,还是安装常规方法比较好。

是的,所以我前面提到,除非写驱动求效率,通常按常规做。普通的应用,效率取决于算法和数据结构,不是完全靠底层,只有在实践证明万不得已的情况,才针对瓶颈部位做优化,走底层道路是最后的选项。

比如现在我写的这个,就是测试过各种实现的。在.net的C++中,可以用Console类实现自由显示的效果,但那有一个缺陷,就是必须同时移动光标,这会很明显的拖慢速度,而且,一个无法解决的问题,是在屏幕右下角输出字符之后,屏幕内容会上移一行,那是不可接受的,解决的办法,只有用这个。

[ 本帖最后由 TonyDeng 于 2015-7-9 22:48 编辑 ]

授人以渔,不授人以鱼。
2015-07-09 22:44
l3041116098
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-6-22
收藏
得分:0 

编程继续编
2015-07-12 15:41
快速回复:在VC中直接写屏的方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017179 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved