阅读:1482回复:13
在vxd中如何改写I/O permission map(IOPM)?
如题!给50分
|
|
沙发#
发布于:2002-12-03 19:55
改它干么?
你可以监视一个io口;当其他程序调用改口时,你可以做适当处理。 |
|
板凳#
发布于: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分 |
|
地板#
发布于:2002-12-04 17:55
哥们,是这样的:当你的计算机有新卡(如isa数据采集卡)时,98下,你对卡的操作可以直接使用inp,outp等。但鼠标等比较奇特,因为系统中已经有一个鼠标驱动存在,它监视该口的运行。如果你的驱动程序是对com操作,确实需要新编vxd替换原来的。
|
|
地下室#
发布于:2002-12-04 18:33
找个例子吧。
(要不我给你找一个,但这几天比较忙) |
|
5楼#
发布于:2002-12-04 22:47
可是我如何知道port是被哪个vxd使用的呢?如何替换?
如果有例子请给个我,给分 系统是否有未公开的函数解决这个问题的?有没有人研究过? |
|
6楼#
发布于:2002-12-05 10:15
com2的中断号是3号,你写个关于中断的驱动程序,按鼠标时,会产生中断,该驱动程序运行,你可以监视一下。其地址0x2f8-0x2ff,你查资料试试。
|
|
7楼#
发布于:2002-12-05 10:18
你可以采用动态装入法,在应用程序中装入自己的vxd,这是在应用程序下,调的就是你的vxd。
|
|
8楼#
发布于:2002-12-05 12:28
哥们,试了吗?
|
|
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派生就挂接不上。 |
|
10楼#
发布于:2002-12-06 21:29
搜寻一下,有没有VmouseD
|
|
11楼#
发布于:2002-12-09 08:19
有vmouse.
|
|
12楼#
发布于:2002-12-09 15:34
估计是他监视这几个io口。
|
|
13楼#
发布于:2002-12-10 08:13
那么如何解除它的监视,或者在它之前加载我的
vxd中断程序? |
|