我企图用winIo里面的两个函数访问CMOS,无论我将偏移量设置为多少
读出的数据总是相同的,我想我并没有有效的设置偏移量,帮我看看如何解决吧
InitializeWinIo(); //返回值为1,正确
SetPortVal(0x70,i, 4);//0<i<255
GetPortVal(0x71, &data, 4);
//无论 i 设置为多少,data的值总是相同的
在2000/xp下改用
InitializeWinIo();
_outp(0x70, i);
data= _inp(0x71);
结果也是一样的. 怎样才能读/写 CMOS 里 256 字节的全部内容呢?
用同样的方法可以 读 BIOS 内容吗?
读出的数据总是相同的,我想我并没有有效的设置偏移量,帮我看看如何解决吧
InitializeWinIo(); //返回值为1,正确
SetPortVal(0x70,i, 4);//0<i<255
GetPortVal(0x71, &data, 4);
//无论 i 设置为多少,data的值总是相同的
在2000/xp下改用
InitializeWinIo();
_outp(0x70, i);
data= _inp(0x71);
结果也是一样的. 怎样才能读/写 CMOS 里 256 字节的全部内容呢?
用同样的方法可以 读 BIOS 内容吗?
解决方案 »
- 右键点击托盘图标再点关闭,如何实现弹出确认的功能?
- 进程挂起后,为何还能处理刷新消息?
- windows窗口弹不出来了。。。
- vc2003打印问题! “DocumentProperties”: 即使使用参数相关的查找,也未找到标识符
- 请问怎样在VC中加载由VC向导创建的DLL动态链接库?
- AfxInitRichEdit的使用???
- 各位大侠好, 哪儿网络硬盘的资料.最好有源码, 大家帮忙啊!
- 如何屏蔽右键点击任务栏上窗口标题时出现的“最大化、还原、关闭。。。”快捷菜单
- 求助!关于数据库顺序写入的问题?能给出思路或者具体的SQL语句都给分!
- 一个在论坛里提出而未能解决的问题(本人也遇到):在CAsyncSocket中如何收发OOB(带外数据)数据
- 求助,关于winsock?
- 保护模式下,段寄存器还有什么用处?
SetPortVal(0x70,i, 1);//0<i<255
Sleep(1000);
GetPortVal(0x71, &data, 1);
还有我真的不懂,你到底有没有试_outp _inp在NT/2000下面这个函数根本不能调用成功
SetPortVal(0x70,i, 1);//0<i<255
GetPortVal(0x71, &data, 1);但读出来的数据总是 0 ,很郁闷……, 后来就改为 SetPortVal(0x70,i, 4);//0<i<255
GetPortVal(0x71, &data, 4);关于 _inp/_outp, 我在WinIo的说明里看到下面几句话Under Windows NT/2000/XP, calling InitializeWinIo grants the application full access to the I/O address space. Following a call to this function, an application is free to use the _inp/_outp functions provided by the C run-time library to access I/O ports on the system. andUnder Windows 98/ME, an application must use the GetPortVal function to read values from an I/O port. Under Windows NT/2000/XP, it is possible to use the _inp/_inpw/_inpd functions instead of using GetPortVal, provided that the InitializeWinIo function has been called beforehand.我得到的结果和GetPortVal是相同的。
当然一个字节读出 就是 04个字节 读出 378H(WinIo给的例子) 结果是 4294967210 即
1111 1111 1111 1111 1111 1111 1010 1010我怀疑根本就没有读出有效的值,是不是CMOS端口还是封着的呢?
参数也改成(0x70, i, 1)了
可以自如读写 71H 端口,但是无论向70H端口写入什么,读出来的总是全1到底怎么设置偏移量呢,我要读/写 全部的CMOS 信息呀!!郁闷ing....
用sleep()的方法没有作用
参数也改成(0x70, i, 1)了
可以自如读写 71H 端口,但是无论向70H端口写入什么,读出来的总是全1
//////////////////////////
???????是1还是0,我怎么看不懂啊
我说过了,CMOS是8位的数据端口你不要用4字节来读,这样高24位读出来肯定是错误的,高24位可能是连在CPU总线上别的什么寄存器保留的结果........不知道你怎么做的,害我自己写了段程序用来测试,结果可以读出来啊
下面是核心代码,
void CCmosrw2Dlg::Onrmos()
{
CString str;
unsigned long data=0;
DWORD compare=0x80000000; for(int i=0;i<=128;i++)
{
compare=0x80000000;
SetPortVal(0x70,i, 1);//0<i<128
Sleep(1);
GetPortVal(0x71, &data, 1); // TODO: Add your control notification handler code here
str.Format("地址:%u 数值:%u 二进制数值:",i,data);
m_edit.ReplaceSel(str);
for(;compare!=0;compare=compare>>1)
{str.Format("%u",((compare&data)==compare));
m_edit.ReplaceSel(str);
}
str.Format("\r\n");
m_edit.ReplaceSel(str);
data=0;
}
}
另外,注意如果要用的结果data最好屏蔽高24位,因为对于32位存储单元存8位数据来说高24位根本没有用,如果第8位是0那么高24位就是全0,第8位是1高24位就是1这是以前为了使32位CPU兼容16位8位的CPU而定义的软件上的标准,不信,你看下面的运行结果地址:0 数值:23 二进制数值:00000000000000000000000000010111
地址:1 数值:2 二进制数值:00000000000000000000000000000010
地址:2 数值:25 二进制数值:00000000000000000000000000011001
地址:3 数值:66 二进制数值:00000000000000000000000001000010
地址:4 数值:33 二进制数值:00000000000000000000000000100001
地址:5 数值:19 二进制数值:00000000000000000000000000010011
地址:6 数值:3 二进制数值:00000000000000000000000000000011
地址:7 数值:35 二进制数值:00000000000000000000000000100011
地址:8 数值:7 二进制数值:00000000000000000000000000000111
地址:9 数值:3 二进制数值:00000000000000000000000000000011
地址:10 数值:38 二进制数值:00000000000000000000000000100110
地址:11 数值:2 二进制数值:00000000000000000000000000000010
地址:12 数值:80 二进制数值:00000000000000000000000001010000
地址:13 数值:4294967168 二进制数值:11111111111111111111111110000000
地址:14 数值:0 二进制数值:00000000000000000000000000000000
地址:15 数值:0 二进制数值:00000000000000000000000000000000
地址:16 数值:64 二进制数值:00000000000000000000000001000000
地址:17 数值:4294967292 二进制数值:11111111111111111111111111111100
地址:18 数值:4294967280 二进制数值:11111111111111111111111111110000
地址:19 数值:2 二进制数值:00000000000000000000000000000010
地址:20 数值:15 二进制数值:00000000000000000000000000001111
地址:21 数值:4294967168 二进制数值:11111111111111111111111110000000
地址:22 数值:2 二进制数值:00000000000000000000000000000010
地址:23 数值:4294967232 二进制数值:11111111111111111111111111000000
地址:24 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:25 数值:47 二进制数值:00000000000000000000000000101111
地址:26 数值:47 二进制数值:00000000000000000000000000101111
地址:27 数值:4294967231 二进制数值:11111111111111111111111110111111
地址:28 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:29 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:30 数值:0 二进制数值:00000000000000000000000000000000
地址:31 数值:0 二进制数值:00000000000000000000000000000000
地址:32 数值:0 二进制数值:00000000000000000000000000000000
地址:33 数值:0 二进制数值:00000000000000000000000000000000
地址:34 数值:0 二进制数值:00000000000000000000000000000000
地址:35 数值:0 二进制数值:00000000000000000000000000000000
地址:36 数值:0 二进制数值:00000000000000000000000000000000
地址:37 数值:0 二进制数值:00000000000000000000000000000000
地址:38 数值:4294967292 二进制数值:11111111111111111111111111111100
地址:39 数值:4294967193 二进制数值:11111111111111111111111110011001
地址:40 数值:16 二进制数值:00000000000000000000000000010000
地址:41 数值:0 二进制数值:00000000000000000000000000000000
地址:42 数值:0 二进制数值:00000000000000000000000000000000
地址:43 数值:4294967291 二进制数值:11111111111111111111111111111011
地址:44 数值:4294967193 二进制数值:11111111111111111111111110011001
地址:45 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:46 数值:11 二进制数值:00000000000000000000000000001011
地址:47 数值:4294967249 二进制数值:11111111111111111111111111010001
地址:48 数值:4294967232 二进制数值:11111111111111111111111111000000
地址:49 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:50 数值:32 二进制数值:00000000000000000000000000100000
地址:51 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:52 数值:0 二进制数值:00000000000000000000000000000000
地址:53 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:54 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:55 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:56 数值:4294967168 二进制数值:11111111111111111111111110000000
地址:57 数值:0 二进制数值:00000000000000000000000000000000
地址:58 数值:4294967295 二进制数值:11111111111111111111111111111111
地址:59 数值:3 二进制数值:00000000000000000000000000000011
地址:60 数值:4294967218 二进制数值:11111111111111111111111110110010
地址:61 数值:4294967249 二进制数值:11111111111111111111111111010001
地址:62 数值:0 二进制数值:00000000000000000000000000000000
地址:63 数值:18 二进制数值:00000000000000000000000000010010
地址:64 数值:74 二进制数值:00000000000000000000000001001010
..............