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