阅读:1264回复:6
一件奇怪的事情
1>我在98下用BC编inp,outp(16bit程序)
结果发现outp某个端口之后,然后用inp读取同一个端口 返回值却是ff,outp和inp内容不一样,这两个函数根本不起作用 2>然后重启机器,来到MS-Dos方式下,执行程序,发现outp和inp 内容完全一样 3>然后我回到98下,在VC下编了一个程序,CreateProcess调用那个BC 程序,并置为REALTIME_PRIORITY_CLASS 效果同1>一样 真搞不懂98下如何处理端口读写的 好像有种随机性,有时候可以,有时候不行 我用的示范程序是人家在dos时代用汇编编的 应该在dos下跑没问题 到了win98下却不行 |
|
沙发#
发布于:2003-01-07 09:46
下面一个是一个别人写的sample
http://www.nondot.org/sabre/os/files/Disk/HD_PORTS.asm 另外参考http://www.nondot.org/~sabre/os /articles/DiskandDiscDrives/ 大家可以在outp之后马上inp,然后在98下测试 该程序是安全的 |
|
板凳#
发布于:2003-01-07 22:35
不是随机性。WINDOWS下你说的两个库函数是不能正常工作的。
你可以使用嵌入汇编,来操作端口。 象这样: __asm { mov eax,data mov edx,port out edx,eax //输出 ......... ....... in eax,edx //输入 mov data,eax ....... } |
|
地板#
发布于:2003-01-08 09:38
到于某些重要的端口(如IDE),WINDOWS是屏蔽了的
|
|
|
地下室#
发布于:2003-01-08 13:13
windows把重要的端口 (IDE)屏蔽了,哪如果想访问,该怎么办?
必须写VXD,在核心态下访问? 另外,关于windows屏蔽重要端口,您能提供资料么? 小弟不胜感激 |
|
5楼#
发布于:2003-01-08 14:27
Windows和DOS不一样,对底层设备的访问是做了一些保护的,因此直接访问的话是不能得到正确结果的。只有在CPU运行在RING0级别的代码才对硬件设备有完全的访问权限。
|
|
6楼#
发布于:2003-01-08 14:37
事实上,在98下,可以对某些端口直接读写的
例如串口,并口之类 我就不清楚,系统到底对那些端口进行了保护,不能让我直接访问 MSDN也没有相应的资料 另外,我的程序,在前一段时间,在windows下是可以起作用的, 突然间,就不起作用了,只能在纯dos下起作用 让人莫名其妙 难道是闹鬼了? |
|