PopBatteryQueryStatus

NTSTATUS __fastcall PopBatteryQueryStatus(INT64 a1, CHAR a2){
  _OWORD *v2; 
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  unsigned int v8; 
  int v9; 
  int v10; 
  unsigned int v11; 
  int v12; 
  unsigned int v13; 
  unsigned int v14; 
  __int64 v15; 
  __int64 v16; 
  NTSTATUS result; 
  UINT64 InputSize; 
  UINT64 OutputSize; 
  *(_QWORD *)(a1 + 172) = 0i64;
  v2 = (_OWORD *)(a1 + 168);
  *(_QWORD *)(a1 + 180) = 0i64;
  *(_DWORD *)(a1 + 168) = *(_DWORD *)(a1 + 108);
  if( !a2 )
  {
    *(_DWORD *)(a1 + 172) = -1;
    v5 = *(_DWORD *)(a1 + 152);
    v6 = *(_DWORD *)(a1 + 136);
    *(_DWORD *)(a1 + 176) = *(_DWORD *)(a1 + 148);
    if( v5 <= v6 )
    {
      v8 = *(_DWORD *)(a1 + 132);
      if( v5 <= v8 )
      {
        v7 = 0;
        v6 = v8;
      }
      else
      {
        v7 = v8 + 1;
      }
    }
    else
    {
      v7 = v6 + 1;
      v6 = -1;
    }
    v9 = *(_DWORD *)(a1 + 128);
    v10 = 100;
    v11 = 199 * v9;
    v12 = 2 * v9;
    while( 1 )
    {
      v13 = v11 / 0xC8;
      v14 = v11 / 0xC8 - 1;
      if( v14 >= v5 && v14 < v6 )
        v6 = v11 / 0xC8 - 1;
      if( v13 <= v5 )
        break;
      v11 -= v12;
      if( !--v10 )
        goto LABEL_16;
    }
    if( v13 > v7 )
      v7 = v11 / 0xC8;
LABEL_16:
    *(_DWORD *)(a1 + 184) = v6;
    *(_DWORD *)(a1 + 180) = v7;
    DbgPrintEx(0x92u, 2u, "\nBattery Triggers [%p]\n|- High = %u\n|- Low  = %u\n", (const void *)a1, v6, v7);
  }
  LODWORD(OutputSize) = 16;
  LODWORD(InputSize) = 20;
  PopPrepareIoctl(*(IRP **)(a1 + 56), 0x294064ui64, 0, v2, InputSize, OutputSize);
  v15 = *(_QWORD *)(a1 + 56);
  if( a2 )
  {
    result = IoSynchronousCallDriver(*(_DEVICE_OBJECT **)(a1 + 48), (_IRP *)v15);
    if( result < 0 )
      return result;
    *(_OWORD *)(a1 + 148) = *v2;
  }
  else
  {
    v16 = *(_QWORD *)(v15 + 184);
    *(_QWORD *)(v16 - 16) = PopBatteryIrpComplete;
    *(_QWORD *)(v16 - 8) = a1;
    *(_BYTE *)(v16 - 69) = -32;
    IofCallDriver(*(PDEVICE_OBJECT *)(a1 + 48), *(PIRP *)(a1 + 56));
  }
  return 0;
}

Referenced by:

PopBatteryWorker