原创 2008-08-26 | Windows 2000/XP/NT下I/O端口操作

2009-1-21 12:24 4842 6 6 分类: 软件与OS
Windows 2000/XP/NT对硬件实现了屏蔽,对I/O端口进行了严格的控制,许多在Windows
9x下正常运行的用户应用程序,在Windows 2000/XP/NT中直接访问硬件会引起系统异常,因此不能在Windows
2000/XP/NT下直接访问I/O端口。
  通常有两种方法解决Windows
2000/XP/NT下I/O端口操作问题,一是编写一个运行在RING0级(设备驱动驱动程序级)的虚拟设备驱动程序(Virtual X
Device,VSD),它可以不受限制地访问硬件设备、捕获I/O端口操作和内存访问等,甚至可以截获硬件中断,这样就可以在USER方式下实现
Windows
2000/XP/NT下I/O端口的访问操作。另一种方法就是修改I/O允许位图设置,允许一个特定的任务存取特定的I/O端口。这允许USER方式的程
序在RING3级(应用程序级)按照I/O允许位图设置,不受限制地访问I/O端口。
  接下来本文介绍两种在Windows 2000/XP/NT下实现I/O端口操作的方法,WinIO和PortTalk。
 
 WinIO程序库通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,绕过了Windows系统的保护机制,从而允许在Windows
2000/XP/NT下应用程序直接对I/O端口和物理内存进行操作。需要注意的是,在Windows
2000/XP/NT下,WinIO函数库只允许被具有管理员权限的应用程序调用。WinIO程序库含有相应驱动程序的源代码和Visual
BASIC例程,下载地址为:www.internals.com/utilities/winio.zip
 
 PortTalk使用的是上述的第二种方法,它够让你现有的程序运行在windows
2000/XP/NT下,但是需要注意的是,因为必须在RING0和RING3下来回切换,所以使用PortTalk会降低程序的运行效率。
PortTalk设备驱动程序也提供了全部源代码,下载地址为:www.beyondlogic.org/porttalk/porttalk.zip

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条