h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1646回复:18

请问有直接写屏的例子吗?

楼主#
更多 发布于:2003-01-06 14:50
搜索了几个直接写屏的贴子,照着得到显卡的内存地址,用MmMapIoSpace转化,然后写了几个字节进去,结果系统什么也不说就重起了,大家有做过的能给个例子吗?

最新喜欢:

okincnokincn
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-06 15:55
不要用其他函数,直接在设备管理里找到峡卡地址,循环写入即可。本人写过一个,可惜找不到了,是vxd驱动。思路代码都很简单。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-07 17:36
呵呵,我这样干了一下可惨了,结果系统崩溃,无法再启动,删掉驱动也没用,好像连ddk都坏了,无法再编译新的驱动,又不想用原来的ghost,重装系统,直到现在才回来,555555555555555 :(
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-08 13:21
不知道你是怎么干的,代码发来,看看!
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-09 10:51
不要用其他函数,直接在设备管理里找到峡卡地址,循环写入即可。本人写过一个,可惜找不到了,是vxd驱动。思路代码都很简单。


老兄的意思是在设备管理器里找到内存范围然后直接写入?比如范围是0xf0000000-0xf7ffffff,那么就直接往0xf0000000写数据?
这样在vxd里可行,可是在win2000里呢?一定要用mmmapiospace的吧?然后呢?
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-09 12:56
要进行转换。你可以做这个实验。在softice里把显卡地址转换成虚拟地址,然后直接编辑此段内存,在屏幕上就可以看到效果。不要告诉我你不不知道如何现实相邀的信息。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-09 13:29
我早就做过这个试验了,所有的内存区域全都无效
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-09 19:58
你softice用得是否正确,这个实验我做了n次,屡试不爽,不知道您那里为什么不行。如果想我帮忙,把你用的softice的又命令都写下来。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-09 20:15
如下:
显卡内存区域从0xf0000000开始
phys f0000000
bb1d0000
bbb95000
显示数据:
d bb1d0000
d bbb95000
直接用0填满:
f bb1d0000 L 100 0
f bbb95000 L 100 0
都写了256个字节的0

结果屏幕毫无变化,其他的几个内存地址也一样,是哪里用错了吗
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-01-10 13:06
你写的字结束太少了。256字节如果一像素4字节,就是64像素,如果分辨率是800*600的话,还不到1/8行。也就是你只写了1/8行长,1像素高的一个长方形,你看得见吗?把它改大一点就行了比如800*100*4即可。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-01-10 13:44
问题不在这里,1/8行已经足够看清了。我写入过了更多的字节,一样没有效果
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-01-10 14:06
你了多少字节?
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-01-10 14:41
4000h(16384)字节,我想只要已经写进去的话,足够看到了。
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-01-10 14:50
老哥,你多写点,4000h不过几行,你写半屏幕。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-01-10 15:04
我想这不是数量的问题了,如果我眼睛没问题,16k的黑色区域应该看到了
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
yyhabc
驱动小牛
驱动小牛
  • 注册日期2003-01-06
  • 最后登录2013-03-18
  • 粉丝0
  • 关注0
  • 积分327分
  • 威望47点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-01-10 16:21
如果你没有错的话,你的电脑该轧着吃了。我现在已经在吐血了,我血如泉涌。
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-01-10 16:26
老兄,保重身体 :D
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-01-10 23:46
呵呵,你可以试着用这个办法::

1 . 调用 DirectDraw,创建DirectDraw Primary Surface.
2.  Lock DirectDraw Primary Surface .
3.  返回的结构DIRECTDRAWSURFACEDESC 里面有一个lpsurface,
    就是显存的开始(虚拟)地址。
4.  将这个地址传给驱动程序,调用 MmGetPhysicalAddress。
    就可以得到物理地址了。
5   如果你需要得到一个核心态的虚拟地址的话,就要调用:
   MmProbeAndLockPages,MmMapLockedPages。
6   不使用了的时候 ,Unlock DirectDraw Primary Surface

BTW: 至于用softice编辑,看不到屏幕变化的,是因为,屏幕不
一定从显卡的内存的起始地址开始的。另外,有的卡,有两个内
存区域,其中一个是用来访问显卡寄存器的,另外一个才是frame
buffer,也有可能还有一个,是用来AGP访问的。其他的还可能有
用于标准VGA的。



 
  
    
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-01-11 08:36
谢谢,我没用过directdraw,可以简要给几行代码说明一下吗?
另外,如果每次都要调用directdraw的话,稍微有点麻烦,如果直接用设备管理器里的内存地址的话,应该怎样转化?
非常感谢
 :)
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
游客

返回顶部