sharpor
驱动小牛
驱动小牛
  • 注册日期2005-04-04
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分127分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2005-05-23 14:29
你说得很对,bios在flash的时候会把f0000的dmi读出并更新。像我们提供的bios,会有一个bios32接口,去修改dmi信息,不会用pnp function,因为那个定义本来就是给16位代码用的,你硬要在windows下用不好吧。如果你们有bios 工程师就应该叫他们提供bios32接口。这是他们的事情,你不用操心啊。
如果是32位代码,我会在driver层定义一个buffer,把程序copy到buffer,然后push 好ip和cs,跳到buffer去跑,程序最后一句一定是retf,就可以安全返回了。
sunvan
驱动牛犊
驱动牛犊
  • 注册日期2004-03-12
  • 最后登录2011-07-06
  • 粉丝0
  • 关注0
  • 积分-100分
  • 威望-9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2005-05-23 11:43
TO:sharpor

DMI信息是从 存储bios的flash 中load到内存中的,你的那种方法虽然能该,当只能改当前内存中的信息,机器一重起,那DMI信息不由恢复原来的数据了。

如果通过调用PnP bios的接口函数可以将 存储bios的flash中的DMI信息给改变(因为BIOS源码中那PnP 接口就是修改flash中的数据),这样才会永久的修改的 。

所以希望能在Windows中调用 PnP BIOS 提供的接口。

因此问题也就是:在 Windows下如何调用指定物理地址上对应的函数?
sharpor
驱动小牛
驱动小牛
  • 注册日期2005-04-04
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分127分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2005-05-23 10:39
访问pci寄存器的f000:0写保护。search \"_DMI_\"。直接改f0000中的DMI table 吧。比较方便。
sharpor
驱动小牛
驱动小牛
  • 注册日期2005-04-04
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分127分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2005-05-23 10:37
访问pci寄存器的f000:0写保护。search $DMI。直接改f0000中的DMI table 吧。比较方便。
sunvan
驱动牛犊
驱动牛犊
  • 注册日期2004-03-12
  • 最后登录2011-07-06
  • 粉丝0
  • 关注0
  • 积分-100分
  • 威望-9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2005-05-23 09:41
TO:sharpor
 
我这边主要是用来修改DMI信息的,
DOS下的代码,我写过了,是可以的。可在Windows下,我这就不行了,能否提供代码给我参考,谢谢了
sharpor
驱动小牛
驱动小牛
  • 注册日期2005-04-04
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分127分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2005-05-19 12:07
pnp function是很老的东西了。你还在用?奇怪中。。。。。
sharpor
驱动小牛
驱动小牛
  • 注册日期2005-04-04
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分127分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2005-05-19 12:06
F000:0 中的东西实际上在进入win2000之后访问虚拟内存地址也是访问的物理内存同一块东西。可以直接把ip指到那里去跑也能跑出正常的结果,我试过可以。
在驱动中我是叫了块内存。然后手动call进去。也能正常返回。反正既然是f0000中的东西。随便啦。。。。
上一页 下一页
游客

返回顶部