阅读:1283回复:5
如何解除win9x系统对I/O端口的封锁
win9x会封锁某些端口,在softice中用tss命令可以看到是否
被trap,但是用createfile命令后,再用tss看,端口状态就 发生了变化,不知道系统是如何实现的? 或者说在vxd中如何改写I/O permission map(IOPM)?给20分 |
|
沙发#
发布于:2002-12-03 19:44
win9x下可以直接对io口操作呀!!
|
|
板凳#
发布于:2002-12-04 09:13
我看到的资料都说可以直接读写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的封锁吧? |
|
地板#
发布于:2002-12-04 21:48
是的,有些端口可能无法操作(鼠标等),这是因为系统本身有一个关于鼠标的vxd。重新写一个vxd.
|
|
地下室#
发布于:2002-12-04 22:34
那么自己写的vxd必须在系统的vxd初始化之前初始化了,如何知道
port是被哪个vxd用的? 另外像com1,com2等端口在我的机器上被封锁,可是系统在createfile函数中会释放,在closehandle函数中又会封锁。 我想知道系统是如何做到的? 谢谢gong_xg的回答 给10分 |
|
5楼#
发布于:2002-12-13 21:24
好像在VXD里面可以随心所欲的进行IO访问,系统没办法设置陷阱的
|
|