XINGXD
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1482回复:13

在vxd中如何改写I/O permission map(IOPM)?

楼主#
更多 发布于:2002-12-03 16:29
如题!给50分
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-03 19:55
改它干么?
你可以监视一个io口;当其他程序调用改口时,你可以做适当处理。
XINGXD
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-04 09:18
我看到的资料都说可以直接读写I/O,可是我的机器(win98)确实存在
这个问题,我在学习vxd编程,试图共享com2口中断,在OnSysDynamicDeviceInit中完成了中断实例的初始化和hook,
但是从com2口收不到信息,在softice中genint 53证明中断已经
hook并运行,用tss看到2f8-2ff的trap标志是yes,退出后调用一个
含有createfile函数的应用程序,再到softice中看到2f8-2ff的
trap标志以变成no,此时再用drivermonitor装入vxd即可运行,
如果关闭应用程序,2f8-2ff的trap标志会变回yes状态,装入vxd
也就不能正确运行。
我发现在yes状态下,softice的i 2f8返回的为ff,并不是真正的
端口内容,而在no状态下就能i 2f8的内容,也就是说在我的vxd代码
中的in,out指令有没有得到正确执行,是中断不能执行的原因。
但是我奇怪的是用c++编一个含有createfile(\"Com2\",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);语句的程序并运行,就
能改变tss中的状态,它是如何做到的呢?
另外资料都说在win9x中i/o映射可以直接存取,但也有资料介绍
说win9x会封锁某些port,是不是系统加载的某些驱动会导致封锁的
port不同?应该有办法解除系统对port的封锁吧?
  Gong_XG:谢谢回答,先给10分
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-04 17:55
哥们,是这样的:当你的计算机有新卡(如isa数据采集卡)时,98下,你对卡的操作可以直接使用inp,outp等。但鼠标等比较奇特,因为系统中已经有一个鼠标驱动存在,它监视该口的运行。如果你的驱动程序是对com操作,确实需要新编vxd替换原来的。
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-04 18:33
找个例子吧。
(要不我给你找一个,但这几天比较忙)
XINGXD
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-04 22:47
可是我如何知道port是被哪个vxd使用的呢?如何替换?
如果有例子请给个我,给分
系统是否有未公开的函数解决这个问题的?有没有人研究过?
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-05 10:15
com2的中断号是3号,你写个关于中断的驱动程序,按鼠标时,会产生中断,该驱动程序运行,你可以监视一下。其地址0x2f8-0x2ff,你查资料试试。
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-05 10:18
你可以采用动态装入法,在应用程序中装入自己的vxd,这是在应用程序下,调的就是你的vxd。
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-05 12:28
哥们,试了吗?
XINGXD
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-06 11:42
你说的方法不行,我在vxd中的onsysdynamic中挂接com2的
中断没问题,可是没法进行2f8-2fd端口的初始化呀,也就是
说没法进行baut,parity等参数的设置,在应用程序中打开
vxd后用softice发genint 53,vxd中的中断是能够运行的。
而当softice中的tss状态显示2f8-2ff为no时,vxd就能够
初始化端口了,中断程序也就能正常运行了。
因此我想如果知道com1,com2为系统的那个vxd加载和封锁,把
我的vxd放在它之前静态加载,应该可以解决这个问题。
另外我的com2中断只能用VSharedHardwareInt派生,用
VHardwareInt派生就挂接不上。
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-06 21:29
搜寻一下,有没有VmouseD
XINGXD
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-09 08:19
有vmouse.
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-09 15:34
估计是他监视这几个io口。
XINGXD
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-12-10 08:13
那么如何解除它的监视,或者在它之前加载我的
vxd中断程序?
游客

返回顶部