Newer
Older
AMI-Aptio-BIOS-Reversed / SystemInventory / SystemInventory_sub_3C80.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
__int64 __fastcall sub_3C80(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
  __int64 v4; // rax
  __int64 v5; // rcx
  __int64 v6; // rdi
  __int64 v7; // r8
  __int64 result; // rax
  __int64 v9; // rdx
  __int64 v10; // rcx
  __int64 v11; // rdi
  __int64 v12; // r8
  __int64 v13; // r9
  __int64 v14; // rdi
  __int64 v15; // rdx
  __int64 v16; // rcx
  __int64 v17; // r8
  __int64 v18; // r9
  __int64 v19; // rdx
  __int64 v20; // rcx
  __int64 v21; // r8
  __int64 v22; // r9
  int v23; // [rsp+28h] [rbp-30h]
  _DWORD v24[6]; // [rsp+40h] [rbp-18h] BYREF
  unsigned __int8 v25; // [rsp+70h] [rbp+18h] BYREF
  char v26; // [rsp+78h] [rbp+20h] BYREF

  LOBYTE(v24[0]) = 0; /*0x3c8c*/
  v25 = 0; /*0x3c90*/
  v26 = 1; /*0x3c94*/
  v4 = qword_9690; /*0x3c98*/
  if ( !qword_9690 ) /*0x3ca2*/
  {
    v6 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_96A8 + 320))(&unk_9460, 0, &qword_9690); /*0x3cc1*/
    if ( v6 < 0 ) /*0x3cc7*/
    {
      result = sub_7F8(v5, a2, v7, a4); /*0x3cc9*/
      if ( (_BYTE)result ) /*0x3cd0*/
      {
        result = sub_804(64); /*0x3cdd*/
        if ( (_BYTE)result ) /*0x3ce4*/
          return sub_740(64, "[System Inventory] Locate gIpmiTransport Protocol fail. Status - %r\n", v6); /*0x3cf7*/
      }
      return result; /*0x3cf7*/
    }
    v4 = qword_9690; /*0x3d01*/
  }
  LOBYTE(a4) = -85; /*0x3d0d*/
  LOBYTE(a2) = 50; /*0x3d1d*/
  v11 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, _QWORD, _BYTE, unsigned __int8 *, char *, _DWORD))(v4 + 16))( /*0x3d35*/
          v4,
          a2,
          0,
          a4,
          0,
          0,
          &v25,
          &v26,
          v24[0]);
  if ( v11 < 0 || v25 == 1 ) /*0x3d42*/
  {
    if ( (unsigned __int8)sub_7F8(v10, v9, v12, v13) && (unsigned __int8)sub_804(64) ) /*0x3dcb*/
      sub_740(64, "[System Inventory] send gIpmiTransport Protocol  Status - %r\n", v11); /*0x3de0*/
    result = sub_7F8(v20, v19, v21, v22); /*0x3de5*/
    if ( (_BYTE)result ) /*0x3dec*/
    {
      result = sub_804(64); /*0x3df1*/
      if ( (_BYTE)result ) /*0x3df8*/
        return sub_740(64, "[System Inventory] Check Current BMC virtual USB status - %x\n", v25); /*0x3e0a*/
    }
  }
  else
  {
    LOBYTE(v24[0]) = 1; /*0x3d49*/
    LOBYTE(v13) = -86; /*0x3d53*/
    LOBYTE(v9) = 50; /*0x3d63*/
    LOBYTE(v23) = 1; /*0x3d6a*/
    v14 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, __int64, _DWORD *, int, unsigned __int8 *, char *))(qword_9690 + 16))( /*0x3d8d*/
            qword_9690,
            v9,
            0,
            v13,
            v24,
            v23,
            &v25,
            &v26);
    (*(void (__fastcall **)(__int64))(qword_96A8 + 248))(3000000); /*0x3d90*/
    result = sub_7F8(v16, v15, v17, v18); /*0x3d96*/
    if ( (_BYTE)result ) /*0x3d9d*/
    {
      result = sub_804(64); /*0x3da6*/
      if ( (_BYTE)result ) /*0x3dad*/
        return sub_740(64, "[System Inventory] Disabling BMC USB Interface Status - %r\n", v14); /*0x3db6*/
    }
  }
  return result; /*0x3e14*/
}