UEFI 基础教程 (十七) - SMM的简单使用
一、 编写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的简单使用相关推荐
- UEFI 基础教程 (零) - 目录
GitHub 主页 UEFI 基础教程 (一) - 搭建UEFI开发环境 UEFI 基础教程 (二) - 运行第一个APP HelloWorld UEFI 基础教程 (三) - 运行第一个PEI Dr ...
- UEFI 基础教程 (一) - 运行第一个APP HelloWorld
UEFI 基础教程 (二) - 运行第一个APP HelloWorld 一.代码编写: 1.edk2/OvmfPkg/HelloWorld/HelloWorld.c: #include <Uef ...
- UEFI 基础教程 (十六) - ACPI 简单使用
一.ACPI source code ASL 编译流程 1. 初始化UEFI编译环境 edksetup.bat 2. 创建ASL源文件 终端执行以下命令生成 csdn.asl. 和csdnhw. ...
- UEFI 基础教程 (一) - 基于QEMU搭建UEFI开发环境(win/linux)
一.EDKII windows 环境搭建 1. 下载UEFI开源代码 cmd进入C盘根目录,git clone https://github.com/tianocore/edk2.git edkii ...
- UEFI 基础教程 (十四) - 设置默认启动项为UEFI Shell
一 编写源代码 OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c UINTN BootOptionPriority ( CONST EFI_BO ...
- UEFI 基础教程 (十一) - Shell下读取SMBIOS信息
一. 编写源代码 编写UEFI Application 代码C:\edkii\OvmfPkg\MyHelloWorldSMBios\MyHelloWorldSMBios.c, EFI_STATUS E ...
- [转载] Python3入门精通基础教程(合集)
参考链接: Python3基础 Python3基础教程,持续更新中... 非常好的Python3基础教程合集,简单明了,快速掌握Python3核心技术! 01--Python及其开发环境的安装(Pyc ...
- ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...
- ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...
最新文章
- 如何写出符合Python审美的代码风格?
- JAXB--@XmlElementWrapper注解和泛型一起使用
- 教师查询系统C语言,教师管理系统c语言版
- 程序员黑科技 | 用13块钱DIY微信小程序浇花神器
- signature=42f2498bc8fd40eb63568566c79f37e7,新思维综合英语Ⅰ学习指导
- centos 7.x systemd service 配置方法整理
- (转)Centos7 Nginx安装
- gulp 批量添加类名 在一个任务中使用多个文件来源
- dao-service-servlet-jsp构建简易web通讯录(三层开发)预备知识
- Java - 泛型 ( Generic )
- Win8怎么在桌面显示我的电脑
- 示例正则表达式验证6位数字密码
- 手机上测试东南西北方向软件,指南针怎么看东南西北(手机指南针怎么看图解)...
- 惠普电脑如何安装双系统
- 数据恢复软件从iOS恢复Safari浏览记录
- IPA转APP的方法和APP转IPA的方法
- 学习SQL的侦探游戏
- 万年历的Java代码
- 联通鸿蒙卡怎么样,联通腾讯大王卡对比百度大神卡:到底选谁看完就明白了
- 除了性生活就是打麻将:中国 2000 多个县城生活实录