PopDiagTraceHiberStats

VOID __stdcall PopDiagTraceHiberStats(){
  NTSTATUS v0; 
  VOID *v1; 
  UINT64 v2; 
  unsigned __int64 v3; 
  __int64 v4; 
  char *v5; 
  $9809CEAD2DA957FAEE8580DC38A49918 *v6; 
  char *Data; 
  __int64 *v8; 
  __int64 v9; 
  char *v10; 
  unsigned __int64 v11; 
  int v12; 
  int v13; 
  REGHANDLE v14; 
  UINT64 DataSize; 
  UINT64 DataSizeb; 
  UINT64 DataSizea; 
  VOID *Handle[3]; 
  __int64 v19; 
  unsigned __int64 v20; 
  __int128 v21; 
  char v22[384]; 
  _EVENT_DATA_DESCRIPTOR UserData; 

  v21 = 0i64;
  memset(Handle, 0, sizeof(Handle));
  v0 = PopOpenPowerKey(Handle);
  v1 = Handle[0];
  if( v0 < 0 )
    v1 = 0i64;
  Handle[0] = v1;
  v2 = PopCaptureTimeOnProcZero();
  v3 = *(&stru_140C23628 + 77);
  *(&stru_140C23628 + 85) -= *(&stru_140C23628 + 82) + *(&stru_140C23628 + 81);
  *(&stru_140C23628 + 78) = v2 - (*(&stru_140C23628 + 82) + *(&stru_140C23628 + 81));
  *(&stru_140C23628 + 221) = dword_140C23484;
  *(&stru_140C23628 + 220) = dword_140C23508;
  v20 = *(&stru_140C23628 + 77);
  *(&stru_140C23628 + 200) = PopQpcTimeInMs(
                               (_LARGE_INTEGER *)&stru_140C23628 + 42,
                               (_LARGE_INTEGER *)&stru_140C23628 + 43);
  *(&stru_140C23628 + 58) = (unsigned int)PopQpcTimeInMs(
                                            (_LARGE_INTEGER *)&stru_140C23628 + 36,
                                            (_LARGE_INTEGER *)&stru_140C23628 + 59);
  PopComputeDerivedHiberStats((unsigned __int64 *)&stru_140C23628 + 50, v3, (__int64)&v21);
  v4 = 47i64;
  v5 = v22;
  v19 = 47i64;
  v6 = &UserData.12;
  Data = v22;
  v8 = &qword_140988950;
  do
  {
    v9 = *(v8 - 1);
    if( (*(_DWORD *)v8 & 0x40000000) != 0 )
      v10 = &v22[v9 - 8];
    else
      v10 = (char *)&stru_140C23628 + v9 + 400;
    if( (*(_DWORD *)v8 & 2) != 0 )
      v11 = *(_QWORD *)v10;
    else
      v11 = *(unsigned int *)v10;
    *(_QWORD *)v5 = v11;
    v12 = *(_DWORD *)v8;
    if( *(int *)v8 < 0 )
    {
      v4 = v19;
      *(_QWORD *)v5 = v11 / v3;
    }
    v13 = v12 & 0x20;
    if( v1 )
    {
      RtlInitUnicodeString((PUNICODE_STRING)&Handle[1], (PCWSTR)*(v8 - 2));
      LODWORD(DataSize) = v13 != 0 ? 8 : 4;
      ZwSetValueKey(v1, (_UNICODE_STRING *)&Handle[1], 0i64, v13 != 0 ? 11 : 4, Data, DataSize);
      v4 = v19;
    }
    *(_QWORD *)&v6[-3].Reserved = Data;
    v6[-1].Reserved = v13 != 0 ? 8 : 4;
    Data += 8;
    v3 = v20;
    v8 += 3;
    v6->Reserved = 0;
    v5 += 8;
    v6 += 4;
    v19 = --v4;
  }
  while( v4 );
  *(&stru_140C23628 + 93) /= v3;
  *(&stru_140C23628 + 51) /= v3;
  *(&stru_140C23628 + 111) = *(&stru_140C23628 + 78) / v3 - *(&stru_140C23628 + 120) - *(&stru_140C23628 + 122);
  if( v1 )
  {
    RtlInitUnicodeString((PUNICODE_STRING)&Handle[1], L"KernelResumeIoCpuTime");
    LODWORD(DataSize) = 4;
    ZwSetValueKey(v1, (_UNICODE_STRING *)&Handle[1], 0i64, 4ui64, (char *)&stru_140C23628 + 744, DataSize);
    RtlInitUnicodeString((PUNICODE_STRING)&Handle[1], L"HiberIoCpuTime");
    LODWORD(DataSizeb) = 4;
    ZwSetValueKey(v1, (_UNICODE_STRING *)&Handle[1], 0i64, 4ui64, (char *)&stru_140C23628 + 408, DataSizeb);
    if( *(&stru_140C23628 + 98) )
    {
      dword_140C23464 += PopQpcTimeInMs((_LARGE_INTEGER *)&stru_140C23628 + 40, (_LARGE_INTEGER *)&stru_140C23628 + 99);
      RtlInitUnicodeString((PUNICODE_STRING)&Handle[1], L"HybridBootAnimationTime");
      LODWORD(DataSizea) = 4;
      ZwSetValueKey(v1, (_UNICODE_STRING *)&Handle[1], 0i64, 4ui64, &dword_140C23464, DataSizea);
    }
    *(&stru_140C23628 + 112) = (((unsigned __int64)KUSER_SHARED_DATA.TickCountMultiplier << 32)
                              * (unsigned __int128)(KUSER_SHARED_DATA.TickCountQuad << 8)) >> 64;
    RtlInitUnicodeString((PUNICODE_STRING)&Handle[1], L"ResumeCompleteTimestamp");
    LODWORD(DataSizea) = 8;
    ZwSetValueKey(Handle[0], (_UNICODE_STRING *)&Handle[1], 0i64, 0xBui64, (char *)&stru_140C23628 + 896, DataSizea);
    ZwClose((_HANDLE)Handle[0]);
  }
  if( PopDiagHandleRegistered )
  {
    v14 = PopDiagHandle;
    if( EtwEventEnabled(PopDiagHandle, &POP_ETW_EVENT_HIBER_STATS) )
      EtwWrite(v14, &POP_ETW_EVENT_HIBER_STATS, 0, 0x2Fu, &UserData);
  }
}

Referenced by:

PopIssueActionRequest