Newer
Older
AMI-Aptio-BIOS-Reversed / Platform / SetupPolicyInit.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
// SetupPolicyInit - decompiled from Platform.efi
UINTN SetupPolicyInit(__int64 a1, va_list va, const void *SourceBuffer, ...)
{
  __int64 v4; // rax
  bool v7; // zf
  void *ZeroPool; // rax
  __int64 v10; // rax
  __int64 v11; // rax
  __int64 v12; // rax
  UINTN v13[2]; // [rsp+30h] [rbp-10h] BYREF
  UINTN AllocationSize; // [rsp+78h] [rbp+38h] BYREF
  va_list v15; // [rsp+78h] [rbp+38h]
  va_list va1; // [rsp+80h] [rbp+40h] BYREF

  va_start(va1, SourceBuffer);
  va_start(v15, SourceBuffer);
  AllocationSize = va_arg(va1, _QWORD); /*0x7e20*/
  v13[0] = 0; /*0x7e3a*/
  v4 = qword_FF28; /*0x7e42*/
  if ( !qword_FF28 || !byte_FF20 || !qword_FF18 ) /*0x7e65*/
  {
    v7 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_FBF0, 0, &qword_FF28) == 0; /*0x7e84*/
    v4 = qword_FF28; /*0x7e87*/
    if ( v7 ) /*0x7e8e*/
    {
      (*(void (__fastcall **)(__int64, char *))qword_FF28)(qword_FF28, &byte_FF20); /*0x7e9a*/
      v4 = qword_FF28; /*0x7e9c*/
    }
  }
  if ( byte_FF20 ) /*0x7eb0*/
  {
    v10 = (*(__int64 (__fastcall **)(__int64, __int64 *))(v4 + 8))(v4, &qword_FF18); /*0x7efc*/
    if ( v10 < 0 ) /*0x7f02*/
    {
      DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10); /*0x7f11*/
      Assert((__int64)"e:\\hs\\PurleyRpPkg\\Library\\SetupLib\\DxeSetupLib.c", 85, (__int64)"!EFI_ERROR (Status)"); /*0x7f29*/
    }
    v11 = (*(__int64 (__fastcall **)(__int64, UINTN, UINTN *))(qword_FF18 + 80))(6, AllocationSize, v13); /*0x7f42*/
    if ( v11 < 0 ) /*0x7f48*/
    {
      DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v11); /*0x7f57*/
      Assert((__int64)"e:\\hs\\PurleyRpPkg\\Library\\SetupLib\\DxeSetupLib.c", 87, (__int64)"!EFI_ERROR (Status)"); /*0x7f6f*/
    }
    if ( !v13[0] ) /*0x7f7b*/
      return 0; /*0x7f7b*/
    IoRead16(v13[0]); /*0x7f85*/
    ZeroPool = (void *)v13[0]; /*0x7f8a*/
  }
  else
  {
    ZeroPool = AllocateZeroPool(AllocationSize); /*0x7eb6*/
    v13[0] = (UINTN)ZeroPool; /*0x7ebb*/
    if ( !ZeroPool ) /*0x7ec2*/
    {
      Assert((__int64)"e:\\hs\\PurleyRpPkg\\Library\\SetupLib\\DxeSetupLib.c", 79, (__int64)"Buffer != ((void *) 0)"); /*0x7ed9*/
      return 0; /*0x7eed*/
    }
  }
  v12 = (*(__int64 (__fastcall **)(__int64, const void *, va_list, UINTN *, void *))(RuntimeServices + 72))( /*0x7fa7*/
          a1,
          SourceBuffer,
          va,
          (UINTN *)v15,
          ZeroPool);
  if ( v12 < 0 ) /*0x7fad*/
  {
    DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v12); /*0x7fbc*/
    Assert((__int64)"e:\\hs\\PurleyRpPkg\\Library\\SetupLib\\DxeSetupLib.c", 98, (__int64)"!EFI_ERROR (Status)"); /*0x7fd4*/
    if ( byte_FF20 ) /*0x7fe4*/
      (*(void (__fastcall **)(UINTN))(qword_FF18 + 88))(v13[0]); /*0x7fed*/
    else
      (*(void (__fastcall **)(UINTN))(BootServices + 72))(v13[0]); /*0x7ffc*/
    return 0; /*0x7ff0*/
  }
  return v13[0]; /*0x8012*/
}