HalpSetResumeTime
void __fastcall HalpSetResumeTime(__int64 a1, int a2){
__int64 v2;
NTSTATUS v3;
unsigned __int64 v4;
UINT64 v5;
_LARGE_INTEGER CurrentTime;
UINT8 RtcValid;
UINT64 pullResult;
unsigned __int64 v9;
CurrentTime.QuadPart = 0i64;
v9 = 0i64;
pullResult = 0i64;
if( a2 )
{
if( byte_140C49D29 )
{
if( a2 == 1 )
{
if( (*(&CmpDummyThreadEvent + 5784) & 1) == 0 && *(&CmpDummyThreadEvent + 678) )
{
if( (*(&CmpDummyThreadEvent + 5784) & 2) == 0 && !*(&stru_140CF2E80 + 1829) )
*(&CmpDummyThreadEvent + 678) += PsGetCurrentServerSiloGlobals((_KSPIN_LOCK *)a1)->ExTimeZoneState->TimeZoneBias.QuadPart;
v2 = ((__int64(__fastcall *)(unsigned __int64 *))off_140C007F0)(&v9);
v3 = RtlULongLongMult(v2 - *(&CmpDummyThreadEvent + 679), 0x989680ui64, &pullResult);
v5 = pullResult / v9;
if( v3 < 0 )
v5 = 10000000 * (v4 / v9) + 10000000 * (v4 % v9) / v9;
*(&CmpDummyThreadEvent + 678) += v5;
}
}
else if( a2 == 2 )
{
if( (*(&CmpDummyThreadEvent + 5784) & 1) != 0
|| !*(&CmpDummyThreadEvent + 678)
|| (unsigned __int8)HalpQueryVirtualRtc(&CurrentTime, &RtcValid)
&& *(&CmpDummyThreadEvent + 678) < CurrentTime.QuadPart )
{
byte_140C4A3A4 = 1;
}
else
{
HalpSetVirtualRtc((_LARGE_INTEGER *)&CmpDummyThreadEvent + 678);
*(&CmpDummyThreadEvent + 678) = 0i64;
}
}
}
}
else if( a1 )
{
*(&CmpDummyThreadEvent + 678) = *(_QWORD *)(a1 + 120);
*(&CmpDummyThreadEvent + 679) = *(_QWORD *)(a1 + 128);
*(&CmpDummyThreadEvent + 723) = *(_QWORD *)(a1 + 136);
}
}Referenced by:
HalpEfiInitializeOnResume
HalpPostSleepMP