PolomWUS
驱动牛犊
驱动牛犊
  • 注册日期2003-06-20
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:945回复:1

请教,VXD地址转换到V86地址时的问题

楼主#
更多 发布于:2003-11-02 19:11
日前在98下用VMM管理器进入V86模式调用Int13中断读绝对扇区数据时碰到一个地址转换的问题,每当调用到LinMapIntoV86时系统总死掉,不知道还需要主要什么???

代码片断,拜托前辈帮忙了!!!!

DWORD AddrData = (DWORD)gSectors;   //gSectors我定义的一个全局变量大小是8192(两个页面吧?),用于保存读出的扇区数据。

PageNum = AddrData>>12;     //线性地址的页面数
PageOff = AddrData&0xfff;   //线性地址的偏移

hVM = Get_Cur_VM_Handle();

//保存当前虚拟机的寄存器状态
Save_Client_State(&saveregs);    
  
DWORD vmpnum = 0x10;
vmpnum = GetFirstV86Page();
//执行这个LinMapIntoV86总是死机,不知道还需要主要什么???
if(!LinMapIntoV86(PageNum/*线性地址页面数*/,hVM,vmpnum/*V86地址页面数*/,2/*我要转换两页*/,0,&MyPage))
{
    Debug_Printf_Service(\"LinMapIntoV86: Failed\\n\");
    Restore_Client_State(&saveregs);
    return;
}


Address=(MyPage<<12)+PageOff; //计算新的线性地址
seg=LOWORD(Address>>4); //把线性地址转化成传统的段:偏
offset=LOWORD(Address-(seg<<4)); //移量的形式


i m a newer~~:D learning... GOOD GOOD STUDY, DAY DAY UP.
PolomWUS
驱动牛犊
驱动牛犊
  • 注册日期2003-06-20
  • 最后登录2005-12-15
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-03 13:26
没有人能帮我吗???????
i m a newer~~:D learning... GOOD GOOD STUDY, DAY DAY UP.
游客

返回顶部