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