Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
OpenCorePKG_MOD
提交
6fdbcb23
O
OpenCorePKG_MOD
项目概览
btwise
/
OpenCorePKG_MOD
通知
26
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
OpenCorePKG_MOD
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6fdbcb23
编写于
1月 12, 2020
作者:
V
vit9696
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
OpenCoreNvram: Add support for LegacyOverwrite
上级
3bd47ed2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
6 deletion
+56
-6
Platform/OpenCore/OpenCoreNvram.c
Platform/OpenCore/OpenCoreNvram.c
+56
-6
未找到文件。
Platform/OpenCore/OpenCoreNvram.c
浏览文件 @
6fdbcb23
...
...
@@ -144,7 +144,8 @@ OcSetNvramVariable (
IN
UINT32
Attributes
,
IN
UINT32
VariableSize
,
IN
VOID
*
VariableData
,
IN
OC_NVRAM_LEGACY_ENTRY
*
SchemaEntry
IN
OC_NVRAM_LEGACY_ENTRY
*
SchemaEntry
,
IN
BOOLEAN
Overwrite
)
{
EFI_STATUS
Status
;
...
...
@@ -152,7 +153,9 @@ OcSetNvramVariable (
CHAR16
*
UnicodeVariableName
;
BOOLEAN
IsAllowed
;
UINT32
VariableIndex
;
VOID
*
OrgValue
;
UINTN
OrgSize
;
UINT32
OrgAttributes
;
if
(
SchemaEntry
!=
NULL
)
{
IsAllowed
=
FALSE
;
...
...
@@ -194,6 +197,51 @@ OcSetNvramVariable (
NULL
);
if
(
Status
==
EFI_BUFFER_TOO_SMALL
&&
Overwrite
)
{
Status
=
GetVariable3
(
UnicodeVariableName
,
VariableGuid
,
&
OrgValue
,
&
OrgSize
,
&
OrgAttributes
);
if
(
!
EFI_ERROR
(
Status
))
{
//
// Do not allow overwriting BS-only variables. Ideally we also check for NV attribute,
// but it is not set by Duet.
//
if
((
Attributes
&
(
EFI_VARIABLE_RUNTIME_ACCESS
|
EFI_VARIABLE_BOOTSERVICE_ACCESS
))
==
(
EFI_VARIABLE_RUNTIME_ACCESS
|
EFI_VARIABLE_BOOTSERVICE_ACCESS
))
{
Status
=
gRT
->
SetVariable
(
UnicodeVariableName
,
VariableGuid
,
0
,
0
,
0
);
if
(
EFI_ERROR
(
Status
))
{
DEBUG
((
DEBUG_INFO
,
"OC: Failed to delete overwritten variable %g:%a - %r
\n
"
,
VariableGuid
,
AsciiVariableName
,
Status
));
Status
=
EFI_BUFFER_TOO_SMALL
;
}
}
else
{
DEBUG
((
DEBUG_INFO
,
"OC: Overwritten variable %g:%a has invalid attrs - %X
\n
"
,
VariableGuid
,
AsciiVariableName
,
Attributes
));
Status
=
EFI_BUFFER_TOO_SMALL
;
}
FreePool
(
OrgValue
);
}
else
{
DEBUG
((
DEBUG_INFO
,
"OC: Overwritten variable %g:%a has unknown attrs - %r
\n
"
,
VariableGuid
,
AsciiVariableName
,
Status
));
Status
=
EFI_BUFFER_TOO_SMALL
;
}
}
if
(
Status
!=
EFI_BUFFER_TOO_SMALL
)
{
Status
=
gRT
->
SetVariable
(
UnicodeVariableName
,
...
...
@@ -282,10 +330,11 @@ OcLoadLegacyNvram (
OcSetNvramVariable
(
OC_BLOB_GET
(
VariableMap
->
Keys
[
VariableIndex
]),
&
VariableGuid
,
OPEN_CORE_NVRAM_ATTR
,
Config
->
Nvram
.
WriteFlash
?
OPEN_CORE_NVRAM_NV_ATTR
:
OPEN_CORE_NVRAM_ATTR
,
VariableMap
->
Values
[
VariableIndex
]
->
Size
,
OC_BLOB_GET
(
VariableMap
->
Values
[
VariableIndex
]),
SchemaEntry
SchemaEntry
,
Config
->
Nvram
.
LegacyOverwrite
);
}
}
...
...
@@ -422,7 +471,8 @@ OcAddNvram (
Config
->
Nvram
.
WriteFlash
?
OPEN_CORE_NVRAM_NV_ATTR
:
OPEN_CORE_NVRAM_ATTR
,
VariableMap
->
Values
[
VariableIndex
]
->
Size
,
OC_BLOB_GET
(
VariableMap
->
Values
[
VariableIndex
]),
NULL
NULL
,
FALSE
);
}
}
...
...
@@ -434,7 +484,7 @@ OcLoadNvramSupport (
IN
OC_GLOBAL_CONFIG
*
Config
)
{
if
(
Config
->
Nvram
.
UseLegacy
&&
Storage
->
FileSystem
!=
NULL
)
{
if
(
Config
->
Nvram
.
LegacyEnable
&&
Storage
->
FileSystem
!=
NULL
)
{
OcLoadLegacyNvram
(
Storage
->
FileSystem
,
Config
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录