PopRecordPowerWatchdogBlackboxInformation
VOID __stdcall PopRecordPowerWatchdogBlackboxInformation(){
unsigned __int8 v0;
__int64 v1;
int v2;
unsigned __int64 v3;
_DWORD *v4;
int v5;
bool v6;
__int64 v7;
VOID **PoolWithTag;
_DWORD *v9;
__int64 i;
UINT64 v11;
__int128 InputBuffer;
__int128 v13;
InputBuffer = 0i64;
v13 = 0i64;
v0 = KeAcquireSpinLockRaiseToDpc(&PopWatchdogLock);
v1 = PopWatchdogList;
v2 = 0;
v3 = v0;
v4 = 0i64;
if( (__int64 *)PopWatchdogList == &PopWatchdogList )
goto LABEL_13;
do
{
v5 = v2++;
v6 = *(_BYTE *)(v1 + 216) == 0;
v1 = *(_QWORD *)v1;
if( v6 )
v2 = v5;
}
while( (__int64 *)v1 != &PopWatchdogList );
if( !v2 )
{
LABEL_13:
v7 = 0i64;
}
else
{
v7 = 80i64 * (unsigned int)(v2 - 1) + 96;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v7, 1111641936i64);
v4 = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, v7);
*v4 = 1;
v9 = v4 + 4;
v4[1] = v7;
v4[2] = v2;
for( i = PopWatchdogList; (__int64 *)i != &PopWatchdogList; i = *(_QWORD *)i )
{
if( *(_BYTE *)(i + 216) )
{
*v9 = *(_DWORD *)(i + 16);
*((_QWORD *)v9 + 9) = *(_QWORD *)(i + 304);
v9[1] = (*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - *(_QWORD *)(i + 296)) / 0x2710ui64;
v9[2] = *(_DWORD *)(i + 224);
v9[3] = *(_DWORD *)(i + 232);
*((_QWORD *)v9 + 2) = *(_QWORD *)(i + 240);
*((_QWORD *)v9 + 3) = *(_QWORD *)(i + 248);
*((_QWORD *)v9 + 4) = *(_QWORD *)(i + 256);
*((_QWORD *)v9 + 5) = *(_QWORD *)(i + 264);
*((_QWORD *)v9 + 8) = i + 224;
*((_QWORD *)v9 + 6) = *(_QWORD *)(i + 280);
*((_QWORD *)v9 + 7) = *(_QWORD *)(i + 288);
v9 += 20;
}
}
}
}
KxReleaseSpinLock(&PopWatchdogLock);
__writecr8(v3);
if( v7 )
{
*(_QWORD *)&v13 = 0i64;
LODWORD(v11) = 0;
*((_QWORD *)&v13 + 1) = 8i64;
*(_QWORD *)&InputBuffer = v4;
*((_QWORD *)&InputBuffer + 1) = (unsigned int)v7;
NtPowerInformation(PowerInformationLevelMaximum|SystemPowerCapabilities, &InputBuffer, 0x20ui64, 0i64, v11);
}
if( v4 )
ExFreePoolWithTag(v4, 0x42424F50u);
}Referenced by:
PopRecordPoBlackboxInformation