阅读:945回复:1
请教,VXD地址转换到V86地址时的问题
日前在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)); //移量的形式 |
|
|
沙发#
发布于:2003-11-03 13:26
没有人能帮我吗???????
|
|
|