关于PEI阶段AllocatePool一段空间

[复制链接]
SW_Brant 发表于 2019-3-8 11:58:37 | 显示全部楼层 |阅读模式
问题:在PEI阶段AllocatePool申请一片空间并将PeiService的内容整段copy过来,但是无法使用Pei的服务
具体描述:
希望在PEI阶段使用AllocatePool申请一段大小为sizeof(EFI_PEI_SERVICES)的空间,使用(EFI_PEI_SERVICES *)gPSS指向这片空间,然后使用CopyMem()函数,将PEIService的内容整个copy带开辟的空间里面,目前申请成功,Copy成功,但是通过gPSS指针去使用GetBootMode这个服务的时候,得不到正确的结果。

         EFI_PEI_SERVICES                   *gPSS;
         EFI_BOOT_MODE               BootMode;  

        (*PeiServices)->AllocatePool(PeiServices,sizeof(EFI_PEI_SERVICES),(void **)&gPSS);    // Apply for a space
        (*PeiServices)->SetMem(gPSS,sizeof(EFI_PEI_SERVICES),0);                                           // clear space



        CopyMem(gPSS, *PeiServices, sizeof(EFI_PEI_SERVICES));                                              //copy PEI_SERVICES conten to this space
        DEBUG ((EFI_D_INFO, "the gPS header size = [0x%x]\n ",gPSS->Hdr.HeaderSize));     //wwz-debug   |   Print HeaderSize information  |  OK

        Status=gPSS->GetBootMode ((CONST EFI_PEI_SERVICES**)&gPSS, &BootMode);
        DEBUG ((EFI_D_INFO, "wwz-debug | gPSS->BootMode Status = 0x%x\n", BootMode));     //  Status = 0 | sucessful
        DEBUG ((EFI_D_INFO, "wwz-debug | gPSS->BootMode = 0x%x\n", BootMode));               //   BootMode =0xC0330C48    |  wrong

代码如上,正常GetBootMode的结果应该是0,但是在此得到的结果始终不对。
通过指针打印header的相关信息,正确,说明空间申请以及内存Copy应该是没有问题的。

注: 补充问题, 请问AllocatPool申请到的空间内存是连续的吗?





上一篇:蒲公英 Ghost Win7 Sp1(x86/x64)贺岁旗舰版201902(驱动完整版)
下一篇:2019年3月9日签到记录贴
baiers 发表于 7 天前 | 显示全部楼层
为何要copy一次,直接用。
baiers
回复

使用道具 举报

本版积分规则

QQ|Archiver|手机版|小黑屋|RD之家 - 研发工程师的伊甸园 ( 京ICP备18037383号 )
360导航 360安全浏览器 蚂蚁搜索 速搜全球 酷帝网站目录 搜狗导航 114啦网址导航

GMT+8, 2019-3-19 15:44

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表