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