GetFirmwareEnvironmentVariable失败返回错误码1314
GetFirmwareEnvironmentVariable是获取efi主板写入到固件里的数据,如果单单调用
#define VariableGuidStr "{8BE4DF61-93CA-11D2-AA0D-00E098032B8C}"
#define BootOrderStr "BootOrder"
DWORD dwRet = 0;
dwRet = GetFirmwareEnvironmentVariable(
_T(BootOrderStr),
_T(VariableGuidStr),
pBuffer,
iBufferSize);
dwRet的值会是0,msdn上也表明了0代表返回数据大小为0,即使错误,
到微软官方查阅了一下,发现时权限的问题,即使以管理员权限运行此程序也会有几个权限没有包含进来,所以要重新调整权限,于是编写了如下函数
BOOL adjusttoken()
{
HANDLE htoken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken))
{
size_t s = sizeof(TOKEN_PRIVILEGES) + 2*sizeof(LUID_AND_ATTRIBUTES);
TOKEN_PRIVILEGES *p = (PTOKEN_PRIVILEGES)malloc(s);
if(!LookupPrivilegeValue(NULL, SE_SYSTEM_ENVIRONMENT_NAME, &(p->Privileges[0].Luid)) ||
!LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &(p->Privileges[1].Luid)) ||
!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &(p->Privileges[2].Luid)))
{
printf("failed to LookupPrivilegeValue error code : %d \r\n", GetLastError());
free(p);
return FALSE;
}
p->PrivilegeCount = 3;
for(int i = 0; i<3; ++i)
{
p->Privileges[i].Attributes = SE_PRIVILEGE_ENABLED;
}
if(!AdjustTokenPrivileges(htoken, FALSE, p, s, NULL, NULL) || GetLastError() != ERROR_SUCCESS)
{
printf("AdjustTokenPrivileges failed! error code : %d \r\n", GetLastError());
free(p);
return FALSE;
}
//do something here...
free(p);
}
else
{
printf("Open process token failed! error code : %d \r\n", GetLastError());
return FALSE;
}
return TRUE;
}
在调用GetFirmwareEnvironmentVariable之前调用adjusttoken()就可以了,至于那个guid的字符串为什么和efi层规定的guid表示的不一样就不知道了,忘了哪里规定过windows层guid字符串的格式,反正这么写获取到的是对的//efi层是这么规定的GUID gEfiGlobalVariableGuid = { 0x8BE4DF61, 0x93CA, 0x11D2, { 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C }}; 虽然不是字符串,但是格式也不一样。
如果其他函数返回错误码1314的话,可以先怀疑是不是权限的问题,如果需要什么权限可以重新调整一下,//windows的1314错误码的意思是权限没有成功获取,而处理固件需要SE_SYSTEM_ENVIRONMENT_NAME权限
GetFirmwareEnvironmentVariable失败返回错误码1314相关推荐
- ffmpeg avformat_open_input返回失败,错误码-10049
ffmpeg avformat_open_input失败,返回错误码-10049,错误描述:Error number -10049 occurred 调试代码,找到如果设置了time_out参数,就会 ...
- 华为快游戏调用登录接口失败,返回错误码 -1
问题描述 在快游戏项目中,调用华为提供的登录接口,按照示例代码编写完成后,在手机上调试登录时,返回错误码 -1.如下: I jsLog : gameLoginWithReal fail:"A ...
- 关于接口使用抛异常还是返回错误码,下列哪些说法符合《阿里巴巴Java开发手册》
关于接口使用抛异常还是返回错误码,下列哪些说法符合<阿里巴巴Java开发手册>:答案在文末 A. 向公司外部提供的http/api接口,推荐使用"错误码"方式返回异常或 ...
- C++异常 返回错误码
C++异常 返回错误码 参考文章: (1)C++异常 返回错误码 (2)https://www.cnblogs.com/moonlightpoet/p/5670343.html 备忘一下.
- 异常捕获,返回错误码code给前端
异常捕获,返回错误码code给前端
- android 微博sdk 集成 文件不存在(8998) 您所访问的站点在新浪微博的认证失败,错误码 21322
问题:使用mSsoHandler.authorize(new AuthListener()); 请求授权 微博客户端报 文件不存在(8998) 使用mSsoHandler.authorizeWeb(n ...
- 部署在IIS上的网站返回错误码 “405”解决方案
部署在IIS上的网站返回错误码 "405"解决方案 参考文章: (1)部署在IIS上的网站返回错误码 "405"解决方案 (2)https://www.cnbl ...
- 打印机smb扫描显示服务器,您好,打印机扫描完成后显示:通过SMB发送失败,错误码2101.是怎么回事啊,求指点。...
是设置错误,因为IP地址错误,文件夹没有共享,计算机开机没有密码等造成的. 打印机扫描完成后显示"通过SMB发送失败,错误码2101"解决方法如下: 1.该共享文件夹并非共享给ev ...
- 【HMS Core】华为登录后返回错误码 8 、账号服务如何授权、推送服务端获取用户信息异常
1.[HMS core][游戏登陆][问题描述] 调用华为登录后返回错误码 8 [解决方案] 错误码8的话一般在定义为内部错误(引起该错误码的原因很多),但是一般重试基本可以解决该问题(错误码).如果 ...
- wegame显示连接服务器失败,wegame登陆失败提示错误码2怎么办?wegame错误码:2解决方案...
登陆wegame时错误码:2应当如何解决呢?如果无法登入wegame,而又卡在登入界面,其实问题并不复杂,大部分都是因为自身的网络协议所导致的无法登入,下面由我带给大家wegame错误码2的解决方案, ...
最新文章
- 如何查看sqlserver日志的方法
- 计算机工程与应用查重吗,计算机工程期刊录用率_计算机工程与应用期刊_计算机八大核心期刊...
- 力扣——LCP 37. 最小矩形面积(困难)
- Python 分析 35 年的考研英语真题词汇,解读孤独的考研大军!
- 用u盘安装黑苹果10.12.3
- jquery 获取指定元素
- ofo显示服务器故障,ofo服务器超时
- 神策分析 Web JS SDK 功能介绍
- Standford Moss。图形用户页面接口,代码查重
- 五、网络编程实例:聊天室
- html 灯箱效果样式,jQuery灯箱效果插件-Swipebox
- springboot+Elasticsearch实现word,pdf,txt内容抽取并高亮分词全文检索
- linux中的module
- java每日一讲讲什么_每日一讲.ppt
- mysql的锁机制,你真的了解吗?进来吧!用图表告诉你
- V-for and slot-scoped报错问题
- Scratch不仅适合小朋友,程序员和大学老师都应该广泛使用!!!
- “虚拟试衣间”项目可行性分析报告
- 大话西游2服务器维护公告,大话西游2经典版:2019年05月09日停机维护公告
- 关于logarithmicDepthBuffer属性
热门文章
- 显卡内存管理机制及驱动实现(Intel gma500为例)
- npm查看依赖包报错:npm ERR! extraneous解决!!
- 输入一个整数,若为奇数则输出其平方根,否则输出其立方根(分别用单分支、双分支和条件运算实现)
- 解决萤石云sdk语音对讲功能(实现)
- C语言解决三色旗问题
- vue+koa2移动电商实战
- 天空里的云偶遇 彩虹做成衣裳也要用心呵护——潮港城的茶点,好芒果的冰饮...
- 英语的计算机软件如何拼写,软的英文单词
- matlab 输出 syms,matlab中latex和syms的完美结合
- 精辟到毒死人的句子,你看或不看,句子就在这里不痛不痒!