Reading/Writing EFI variables on Linux in kernel mode

﹥>﹥吖頭↗ 提交于 2019-12-04 12:43:31

Try rewriting the code to something like this (beware, it's not tested):

efi_char16_t name[] = L"Boot0001";
efi_guid_t guid = EFI_GLOBAL_VARIABLE_GUID;
u32 attr;
unsigned long data_size = 0;
u8 *data = NULL;
efi_status_t status;

/* Get real size of UEFI variable */
status = efi.get_variable(name,&guid,&attr,&data_size,data);
if (status == EFI_BUFFER_TOO_SMALL) {
   /* Allocate data buffer of data_size bytes */
   data = (u8*)vmalloc(data_size);
   if (!data) {
       /* Your handling here */
   }

   /* Get variable contents into buffer */
   status = efi.get_variable(name,&guid,&attr,&data_size,data);
   if (status != EFI_SUCCESS) {
       /* Your handling here */
   }
   else {
       /* Variable is now in data */
   }   
} 
else if (status == EFI_NOT_FOUND) {
   /* There is no Boot0001 variable. Try Boot0000 maybe? */
} 
else {
   /* Your handling here */
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!