PopDiagTraceHiberStats

VOID __stdcall PopDiagTraceHiberStats(){
  NTSTATUS v0; 
  PVOID v1; 
  UINT64 v2; 
  unsigned __int64 v3; 
  EVENT_DESCRIPTOR *v4; 
  __int64 v5; 
  char *v6; 
  $AC492906E908F75CD234F2140A5AAD56 *v7; 
  char *Data; 
  __int64 *v9; 
  __int64 v10; 
  char *v11; 
  unsigned __int64 v12; 
  int v13; 
  int v14; 
  WCHAR v15; 
  WCHAR v16; 
  WCHAR v17; 
  UINT64 v18; 
  UINT64 DataSize; 
  UINT64 DataSizeb; 
  UINT64 DataSizea; 
  PVOID DestinationString[3]; 
  __int64 v23; 
  INT64 v24; 
  __int128 v25; 
  char v26[384]; 
  struct _EVENT_DATA_DESCRIPTOR UserData; 
  v25 = 0i64;
  memset(DestinationString, 0, sizeof(DestinationString));
  v0 = PopOpenPowerKey(DestinationString);
  v1 = DestinationString[0];
  if( v0 < 0 )
    v1 = 0i64;
  DestinationString[0] = v1;
  v2 = PopCaptureTimeOnProcZero();
  v3 = qword_140C23890;
  qword_140C238D0 -= qword_140C238B8 + qword_140C238B0;
  qword_140C23898 = v2 - (qword_140C238B8 + qword_140C238B0);
  dword_140C2399C = dword_140C23484;
  dword_140C23998 = dword_140C23508;
  v24 = qword_140C23890;
  LODWORD(qword_140C23948) = PopQpcTimeInMs(&stru_140C23778, &stru_140C23780);
  qword_140C237F8 = (unsigned int)PopQpcTimeInMs(&StartTime, &stru_140C23800);
  PopComputeDerivedHiberStats(&qword_140C237B8, v3, (INT64)&v25);
  v5 = 47i64;
  v6 = v26;
  v23 = 47i64;
  v7 = &UserData.12;
  Data = v26;
  v9 = &qword_140988950;
  do
  {
    v10 = *(v9 - 1);
    if( (*(_DWORD *)v9 & 0x40000000) != 0 )
      v11 = &v26[v10 - 8];
    else
      v11 = (char *)&qword_140C237B8 + v10;
    if( (*(_DWORD *)v9 & 2) != 0 )
      v12 = *(_QWORD *)v11;
    else
      v12 = *(unsigned int *)v11;
    *(_QWORD *)v6 = v12;
    v13 = *(_DWORD *)v9;
    if( *(int *)v9 < 0 )
    {
      v5 = v23;
      *(_QWORD *)v6 = v12 / v3;
    }
    v14 = v13 & 0x20;
    if( v1 )
    {
      RtlInitUnicodeString((PUNICODE_STRING)&DestinationString[1], (PCWSTR)*(v9 - 2), (WCHAR)v4);
      LODWORD(DataSize) = v14 != 0 ? 8 : 4;
      ZwSetValueKey(v1, (UNICODE_STRING *)&DestinationString[1], 0i64, v14 != 0 ? 11 : 4, Data, DataSize);
      v5 = v23;
    }
    *(_QWORD *)&v7[-3].Reserved = Data;
    v7[-1].Reserved = v14 != 0 ? 8 : 4;
    Data += 8;
    v3 = v24;
    v9 += 3;
    v7->Reserved = 0;
    v6 += 8;
    v7 += 4;
    v23 = --v5;
  }
  while( v5 );
  qword_140C23910 /= v3;
  qword_140C237C0 /= v3;
  qword_140C239A0 = qword_140C23898 / v3 - (unsigned int)qword_140C23808 - (unsigned int)dword_140C23810;
  if( v1 )
  {
    RtlInitUnicodeString((PUNICODE_STRING)&DestinationString[1], L"KernelResumeIoCpuTime", (WCHAR)v4);
    LODWORD(DataSize) = 4;
    ZwSetValueKey(v1, (UNICODE_STRING *)&DestinationString[1], 0i64, 4ui64, &qword_140C23910, DataSize);
    RtlInitUnicodeString((PUNICODE_STRING)&DestinationString[1], L"HiberIoCpuTime", v15);
    LODWORD(DataSizeb) = 4;
    ZwSetValueKey(v1, (UNICODE_STRING *)&DestinationString[1], 0i64, 4ui64, &qword_140C237C0, DataSizeb);
    if( stru_140C23938.QuadPart )
    {
      dword_140C23464 += PopQpcTimeInMs(&stru_140C23768, &stru_140C23940);
      RtlInitUnicodeString((PUNICODE_STRING)&DestinationString[1], L"HybridBootAnimationTime", v17);
      LODWORD(DataSizea) = 4;
      ZwSetValueKey(v1, (UNICODE_STRING *)&DestinationString[1], 0i64, 4ui64, &dword_140C23464, DataSizea);
    }
    qword_140C239A8 = (((unsigned __int64)KUSER_SHARED_DATA.TickCountMultiplier << 32)
                     * (unsigned __int128)(KUSER_SHARED_DATA.TickCountQuad << 8)) >> 64;
    RtlInitUnicodeString((PUNICODE_STRING)&DestinationString[1], L"ResumeCompleteTimestamp", v16);
    LODWORD(DataSizea) = 8;
    ZwSetValueKey(
      DestinationString[0],
      (UNICODE_STRING *)&DestinationString[1],
      0i64,
      0xBui64,
      &qword_140C239A8,
      DataSizea);
    ZwClose(DestinationString[0]);
  }
  if( PopDiagHandleRegistered )
  {
    v18 = PopDiagHandle;
    if( EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_HIBER_STATS, v4) )
      EtwWrite(v18, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_HIBER_STATS, 0i64, 0x2Fui64, &UserData);
  }
}

Referenced by:

PopIssueActionRequest