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