我知道VC在95/98下,可以用int _inp(端口号)直接取到端口值,可由于2000/XP有保护机制,不允许直接读取端口,所以想请教一下,如何在2000/XP下读到端口的值,谢谢!!!
解决方案 »
- MFC timer问题
- vc6.0可以用charAt()吗?
- 菜鸟问题:release版和debug版是什么意思,怎么建立他们?
- 请问Windows Api中,有没有哪个是用来控制音量的
- 如何根据一个treeview中选中的本机目录,在listview中显示该目录下位图缩略图(以文件字母顺序排列)
- 怎样获得文件对话框保存文件时的扩展名
- 线程同步问题(关于Mutex)!
- 消息循环中消息存在何处及存在状态的疑问?
- 菜鸟问题!告诉我为什么调试同不过?
- 急寻Word接口高手--ZHENG017
- 请问webzip之类的软件原理是什么?
- 如何计算两个日期之间的秒数?我知道有很多人问过了,过去我也搞出来了,但这一次就是不对,帮我看一下这个代码
关键的问题就是端口必须在ring0的核心态才能允许读到,所以其中花了一些篇幅写到了如何启动一个驱动并绑定在一个服务,然后利用程序在用户态ring3与服务进行通讯,这样就可以非常容易的得到端口,以及相关的信息了
关键词和关键信息是:
驱动,服务
// IOPM是65536个端口的位屏蔽矩阵,包含8192字节(8192 x 8 = 65536)
// 0 bit: 允许应用程序访问对应端口
// 1 bit: 禁止应用程序访问对应端口
// 这是两个在ntoskrnl.exe中的未见文档的服务例程
// 没有现成的已经说明它们原型的头文件,我们自己声明
void Ke386SetIoAccessMap(int, IOPM *);
void Ke386IoSetAccessProcess(PEPROCESS, int);
关于驱动和服务的某些属于函数,参详msdn即可