PopBatteryInitialize

NTSTATUS __fastcall PopBatteryInitialize(__int64 a1){
  unsigned int v1; 
  IRP *v3; 
  NTSTATUS result; 
  int v5; 
  const char *v6; 
  __int128 v7; 
  bool v8; 
  _QWORD *v9; 
  _QWORD *v10; 
  UINT64 InputSize; 
  UINT64 InputSizea; 
  UINT64 OutputSize; 
  UINT64 OutputSizea; 
  __m256i Buffer; 
  int v16; 
  int v17; 
  char v18; 
  v1 = *(_DWORD *)(a1 + 108);
  v3 = *(IRP **)(a1 + 56);
  v16 = 0;
  LODWORD(OutputSize) = 36;
  memset(&Buffer.m256i_u64[1], 0, 24);
  Buffer.m256i_i64[0] = v1;
  LODWORD(InputSize) = 12;
  PopPrepareIoctl(v3, 0x294044ui64, 0, &Buffer, InputSize, OutputSize);
  result = IoSynchronousCallDriver(*(_DEVICE_OBJECT **)(a1 + 48), *(_IRP **)(a1 + 56));
  if( result >= 0 )
  {
    v5 = v16;
    v6 = "non-rechargeable";
    v7 = *(_OWORD *)&Buffer.m256i_u64[2];
    v18 = 0;
    *(_OWORD *)(a1 + 112) = *(_OWORD *)Buffer.m256i_i8;
    *(_OWORD *)(a1 + 128) = v7;
    *(_DWORD *)(a1 + 144) = v5;
    v8 = *(_BYTE *)(a1 + 116) == 0;
    v17 = *(_DWORD *)(a1 + 120);
    if( !v8 )
      v6 = "rechargeable";
    LODWORD(OutputSizea) = *(_DWORD *)(a1 + 112);
    LODWORD(InputSizea) = *(_DWORD *)(a1 + 108);
    DbgPrintEx(
      0x92u,
      2u,
      "\n"
      "Battery Information [%p]\n"
      "|-- Tag                 = %u\n"
      "|-- Capabilities        = 0x%08x\n"
      "|-- Technology          = %s\n"
      "|-- Chemistry           = %s\n"
      "|-- DesignedCapacity    = %u\n"
      "|-- FullChargedCapacity = %u\n"
      "|-- DefaultAlert1       = %u\n"
      "|-- DefaultAlert2       = %u\n"
      "|-- CriticalBias        = %u\n"
      "|-- CycleCount          = %u\n",
      a1,
      InputSizea,
      OutputSizea,
      v6,
      &v17,
      *(_DWORD *)(a1 + 124),
      *(_DWORD *)(a1 + 128),
      *(_DWORD *)(a1 + 132),
      *(_DWORD *)(a1 + 136),
      *(_DWORD *)(a1 + 140),
      *(_DWORD *)(a1 + 144));
    *(_DWORD *)(a1 + 104) = 3;
    v9 = (_QWORD *)(a1 + 64);
    v10 = (_QWORD *)qword_140C23558;
    if( *(__int64 **)qword_140C23558 != &qword_140C23550 )
      __fastfail(3u);
    v9[1] = qword_140C23558;
    *v9 = &qword_140C23550;
    *v10 = v9;
    LODWORD(dword_140C23534) = dword_140C23534 + 1;
    ++dword_140C23598;
    result = 0;
    qword_140C23558 = (__int64)v9;
    byte_140C23538 = 1;
  }
  return result;
}

Referenced by:

PopBatteryWorker