Newer
Older
AMI-Aptio-BIOS-Reversed / Platform / SetupInfoRecordsWriter.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
// SetupInfoRecordsWriter - decompiled from Platform.efi
__int64 __fastcall SetupInfoRecordsWriter(__int64 a1, unsigned __int16 a2, __int64 a3)
{
  __int64 x_UEFI_2; // rax
  __int64 result; // rax
  __int64 v7; // rsi
  _BYTE *x_UEFI_1; // rbx
  _BYTE *x_UEFI; // r15
  unsigned __int64 n0xF4240; // rax
  __int64 v11; // rax
  unsigned __int16 v12; // [rsp+78h] [rbp+10h] BYREF

  v12 = a2; /*0xa592*/
  if ( !a1 ) /*0xa5af*/
    Assert((__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 70, (__int64)"HiiHandle != ((void *) 0)"); /*0xa5c2*/
  if ( !a3 ) /*0xa5ca*/
    Assert((__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 71, (__int64)"String != ((void *) 0)"); /*0xa5de*/
  x_UEFI_2 = SetupIfrOptionLookup(a1); /*0xa5e6*/
  if ( !x_UEFI_2 ) /*0xa5f1*/
    return 0; /*0xa5f3*/
  v7 = 0x8000000000000002uLL; /*0xa5fc*/
  x_UEFI_1 = (_BYTE *)x_UEFI_2; /*0xa606*/
  while ( *x_UEFI_1 )
  {
    x_UEFI = x_UEFI_1; /*0xa612*/
    if ( *x_UEFI_1 ) /*0xa615*/
    {
      do /*0xa622*/
      {
        if ( *x_UEFI_1 == 59 ) /*0xa61d*/
          break; /*0xa61d*/
        ++x_UEFI_1; /*0xa61f*/
      }
      while ( *x_UEFI_1 ); /*0xa622*/
      if ( *x_UEFI_1 ) /*0xa627*/
        *x_UEFI_1++ = 0; /*0xa62c*/
    }
    n0xF4240 = BoolToString("x-UEFI"); /*0xa639*/
    if ( LocateHiiSetupConfig(x_UEFI, "x-UEFI", n0xF4240) )
    {
      v11 = v12
          ? (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, _BYTE *, __int64, _QWORD))(qword_FF68 + 16))(
              qword_FF68,
              a1,
              v12,
              x_UEFI,
              a3,
              0)
          : (*(__int64 (__fastcall **)(__int64, __int64, unsigned __int16 *, _BYTE *, _QWORD, __int64, _QWORD))qword_FF68)(
              qword_FF68,
              a1,
              &v12,
              x_UEFI,
              0,
              a3,
              0);
      v7 = v11; /*0xa696*/
      if ( v11 < 0 ) /*0xa69c*/
        break; /*0xa69c*/
    }
  }
  ExtractConfig(); /*0xa6aa*/
  result = 0; /*0xa6af*/
  if ( v7 >= 0 ) /*0xa6b6*/
    return v12; /*0xa6b8*/
  return result; /*0xa6ca*/
}