yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2004-05-31 19:40
还是AllenZh说的对。
其实也不是16位与32位的区别,只是98与2000的区别。
对于2000,核心编程那本书上讲得非常详细,我也实现了。
但是核心编程书上同时也说了很多2000与98区别,结果我用同样的办法在98下实现,却出现系统崩溃现象。
就是常见的什么你做了非法操作,什么即将关闭那个框。
核心编程那本书上说可以用vxd来解决这个98应用层完成不了的问题,所以我就选择了vxd。
现在的问题时,如何在vxd中像应用层得到函数在模块中的地址并交换呢?
唉,有时候不亲自做就是不会发现问题所在的。
yetty_forever
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2004-05-31 22:48
由于该技术已经过失,并且很繁琐,所以这里不想多说了。
只是提供一个实现实现需要注意的地方。
首先需要vc1.5恐怕现在很少有人有了,95ddk,还有对DPMI非常熟悉,对16位的内存管理熟习等等。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
driversupport
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-06-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2004-06-01 13:18
我也很想知道,ring0级还是很难的。
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2004-06-02 10:19
再顶一下
下面是SnowStart得到api的地址方法,我知道这是在应用层才能用,没关系,我的想法是现在应用层得到api的地址,然后再vxd中去写内存,所以这段代码还是可以借鉴的。但是一个新的问题出现了,就是gdi32.dll被进程调用的时候,它是映射到该进程的地址空间的,所以寻找api的地址,是不是应该和调用它的进程联系起来呢?实际上我是想屏蔽某个进程的打印功能,不知道修改api地址如何与改进诚联系起来,还望大家指点。---------给多少分都愿意,只要我有
HMODULE hModule=LoadLibrary(\"gdi.exe\");

FARPROC myStartDoc=GetProcAddress(hModule,\"StartDoc\");

int myStartDoc(
HDC hdc, // handle to DC
CONST DOCINFO* lpdi // contains file names
)
{
//add your code
}
yetty_forever
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2004-06-02 11:51
实现思路(当然也有其它方法)是在函数入口增加一条跳转指令,跳到你的函数地方,然后你处理,然后恢复指令并执行,执行后修改为跳转。
这只是实现该方法的一个办法,当然还有很多其他方法。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2004-06-02 11:54
另外需要将自己的代码注入修改的模块,这也有很多办法,
如果对16位和32位同时处理,需要使用thunk等老掉牙的技术
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
yetty
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2009-07-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2004-06-02 12:51
惭愧,你说的很多我都不知道是什么东西,毕竟是一月前真正开始编程,读硕的年代都是用matlab做数学计算。当然也是自己不学无术。
离题了。。。。。。
yetty_forever
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
27楼#
发布于:2004-06-02 21:14
16位和32位同时处理,很麻烦的,所以在64位以后,所有的内核64位的,避免了无谓的烦琐。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2004-06-13 18:37
是呀,但是当64位真正大规模使用时,32位到64位转换也成为一个很大的事了。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2004-06-13 18:38
但我想MS应该吸取以前的教训,做的聪明些
这样就会比16位到32位简单了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
上一页 下一页
游客

返回顶部