一、 编写SMM driver注册SMM服务

1. 使用SwDispatch Demo1

EFI_STATUS
EFIAPI
CsdnSmiHandler (IN EFI_HANDLE DispatchHandle,IN CONST VOID *Context        OPTIONAL,IN OUT VOID   *CommBuffer     OPTIONAL,IN OUT UINTN  *CommBufferSize OPTIONAL)
{DEBUG((EFI_D_ERROR, "[CSDN] %a Enter\n", __FUNCTION__));// 实现SMM服务DEBUG((EFI_D_ERROR,"[CSDN] %a Exit\n", __FUNCTION__));return EFI_SUCCESS;
}Status = gSmst->SmmLocateProtocol(&gEfiSmmSwDispatch2ProtocolGuid,NULL,(VOID **)&SwDispatch);SwContext.SwSmiInputValue = CSDN_SW_SMI_NO; //自定义SMI Number
ASSERT_EFI_ERROR(SwContext.SwSmiInputValue < SwDispatch->MaximumSwiValue);Status = SwDispatch->Register(SwDispatch,CsdnSmiHandler,&SwContext,&SwSmiHandle);

2. 使用gSmst->SmiHandlerRegister Demo2

EFI_STATUS
EFIAPI
SmmCsdnSmiHandler (IN EFI_HANDLE DispatchHandle,IN CONST VOID *Context        OPTIONAL,IN OUT VOID   *CommBuffer     OPTIONAL,IN OUT UINTN  *CommBufferSize OPTIONAL)
{DEBUG((EFI_D_ERROR, "[CSDN] %a Enter\n", __FUNCTION__));//可以将SMM RAM 内容copy回 communication buffer DEBUG((EFI_D_ERROR,"[CSDN] %a Exit\n", __FUNCTION__));return EFI_SUCCESS;
}Status = gSmst->SmiHandlerRegister(SmmCsdnSmiHandler,&gCsdnSmmGuid,&DispatchHandle
);

二、 触发SMM服务

1. 使用IO Demo3

   IoWrite8 (0xB2, CSDN_SW_SMI_NO);

2. 使用SmmCommunication 访问SMM Demo4

Status = SmmCommunication->Communicate(SmmCommunication, CommBuffer, &CommSize);

UEFI 基础教程 (十七) - SMM的简单使用相关推荐

  1. UEFI 基础教程 (零) - 目录

    GitHub 主页 UEFI 基础教程 (一) - 搭建UEFI开发环境 UEFI 基础教程 (二) - 运行第一个APP HelloWorld UEFI 基础教程 (三) - 运行第一个PEI Dr ...

  2. UEFI 基础教程 (一) - 运行第一个APP HelloWorld

    UEFI 基础教程 (二) - 运行第一个APP HelloWorld 一.代码编写: 1.edk2/OvmfPkg/HelloWorld/HelloWorld.c: #include <Uef ...

  3. UEFI 基础教程 (十六) - ACPI 简单使用

    一.ACPI source code ASL 编译流程 1. 初始化UEFI编译环境  edksetup.bat 2. 创建ASL源文件   终端执行以下命令生成 csdn.asl. 和csdnhw. ...

  4. UEFI 基础教程 (一) - 基于QEMU搭建UEFI开发环境(win/linux)

    一.EDKII windows 环境搭建 1. 下载UEFI开源代码 cmd进入C盘根目录,git clone https://github.com/tianocore/edk2.git edkii ...

  5. UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell

    一 编写源代码 OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c UINTN BootOptionPriority ( CONST EFI_BO ...

  6. UEFI 基础教程 (十一) - Shell下读取SMBIOS信息

    一. 编写源代码 编写UEFI Application 代码C:\edkii\OvmfPkg\MyHelloWorldSMBios\MyHelloWorldSMBios.c, EFI_STATUS E ...

  7. [转载] Python3入门精通基础教程(合集)

    参考链接: Python3基础 Python3基础教程,持续更新中... 非常好的Python3基础教程合集,简单明了,快速掌握Python3核心技术! 01--Python及其开发环境的安装(Pyc ...

  8. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...

  9. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

最新文章

  1. 如何写出符合Python审美的代码风格?
  2. JAXB--@XmlElementWrapper注解和泛型一起使用
  3. 教师查询系统C语言,教师管理系统c语言版
  4. 程序员黑科技 | 用13块钱DIY微信小程序浇花神器
  5. signature=42f2498bc8fd40eb63568566c79f37e7,新思维综合英语Ⅰ学习指导
  6. centos 7.x systemd service 配置方法整理
  7. (转)Centos7 Nginx安装
  8. gulp 批量添加类名 在一个任务中使用多个文件来源
  9. dao-service-servlet-jsp构建简易web通讯录(三层开发)预备知识
  10. Java - 泛型 ( Generic )
  11. Win8怎么在桌面显示我的电脑
  12. 示例正则表达式验证6位数字密码
  13. 手机上测试东南西北方向软件,指南针怎么看东南西北(手机指南针怎么看图解)...
  14. 惠普电脑如何安装双系统
  15. 数据恢复软件从iOS恢复Safari浏览记录
  16. IPA转APP的方法和APP转IPA的方法
  17. 学习SQL的侦探游戏
  18. 万年历的Java代码
  19. 联通鸿蒙卡怎么样,联通腾讯大王卡对比百度大神卡:到底选谁看完就明白了
  20. 除了性生活就是打麻将:中国 2000 多个县城生活实录

热门文章

  1. 新版电商运营学习路线图(全套视频笔记素材合集)
  2. Arduino重置-复位
  3. 手动挡五个档位示意图_手动挡车档位介绍,手动挡挡位示意图
  4. 计算机等级考试进制转换,计算机等级考试进制转换及常用函数
  5. 资产管理系统有哪些功能模块和作用
  6. 坐标转换:将imu坐标系下的角速度、线速度转换到车体坐标系,参考Autoware
  7. 数字成像系统-姜卓-专题视频课程
  8. 实验 详解LNMP应用部署Discuz
  9. 颈椎不太好适合学计算机那,拒绝颈椎病 挑选人体工学电脑桌椅看这几点
  10. unity Editor下批量设置材质球中的贴图部分: