HalpCheckWakeupTimeAndAdjust

NTSTATUS __stdcall HalpCheckWakeupTimeAndAdjust(INT64 a1, INT64 a2, _LARGE_INTEGER a3){
  signed __int64 v3; 
  __int64 v4; 
  unsigned int v5; 
  _LARGE_INTEGER v6; 
  unsigned int v7; 
  __int64 *v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  unsigned int v12; 
  _LARGE_INTEGER v13; 
  __int64 *v14; 
  __int64 v15; 
  __int64 v16; 
  INT64 v17; 
  INT64 v18; 
  signed __int32 v20[8]; 
  __int64 v21; 
  _TIME_FIELDS TimeFields; 
  __int16 Input; 
  _LARGE_INTEGER v24; 
  _LARGE_INTEGER v25; 
  __int64 v26; 

  LODWORD(v3) = HalpPlatformFlags;
  v24.QuadPart = 0i64;
  v21 = 0i64;
  TimeFields = 0i64;
  if( (HalpPlatformFlags & 4) != 0 )
  {
    if( *(&CmpDummyThreadEvent + 5761) )
    {
      LODWORD(v3) = HalQueryRealTimeClock(&TimeFields);
      if( (_BYTE)v3 )
      {
        v4 = *(&ExBootDevicesRemovedEvent + 103);
        v25.QuadPart = 0i64;
        if( !*(&ExBootDevicesRemovedEvent + 103) || !**(&ExBootDevicesRemovedEvent + 103) )
        {
          RtlpTimeFieldsToTimeNoLeapSeconds(&TimeFields.Year, &v24);
          goto LABEL_21;
        }
        v5 = *(_DWORD *)(*(&ExBootDevicesRemovedEvent + 103) + 4i64);
        _InterlockedOr(v20, 0);
        if( RtlpTimeFieldsToTimeNoLeapSeconds(&TimeFields.Year, &v25) )
        {
          v6 = v25;
          v7 = 0;
          if( !v5 )
            goto LABEL_19;
          v8 = (__int64 *)(v4 + 8);
          while( 1 )
          {
            v9 = *v8;
            if( *v8 < 0 )
            {
              v10 = v9 & 0x7FFFFFFFFFFFFFFFi64;
              if( v6.QuadPart < v10 + 10000000 )
              {
                if( v6.QuadPart < v10 )
LABEL_19:
                  v24 = v6;
                break;
              }
              v6.QuadPart -= 10000000i64;
            }
            else if( v6.QuadPart < v9 + 10000000 )
            {
              if( v6.QuadPart < v9 )
                goto LABEL_19;
              v6.QuadPart = 2 * v6.QuadPart - v9;
            }
            else
            {
              v6.QuadPart += 10000000i64;
            }
            ++v7;
            v25 = v6;
            ++v8;
            if( v7 >= v5 )
              goto LABEL_19;
          }
        }
LABEL_21:
        v11 = *(&ExBootDevicesRemovedEvent + 103);
        v26 = 0i64;
        if( !*(&ExBootDevicesRemovedEvent + 103) || !**(&ExBootDevicesRemovedEvent + 103) )
        {
          RtlpTimeFieldsToTimeNoLeapSeconds((__int16 *)&CmpDummyThreadEvent + 2881, &v21);
          goto LABEL_38;
        }
        v12 = *(_DWORD *)(*(&ExBootDevicesRemovedEvent + 103) + 4i64);
        _InterlockedOr(v20, 0);
        if( !RtlpTimeFieldsToTimeNoLeapSeconds((__int16 *)&CmpDummyThreadEvent + 2881, &v26) )
          goto LABEL_38;
        v3 = v26;
        v13.QuadPart = 0i64;
        if( v12 )
        {
          v14 = (__int64 *)(v11 + 8);
          do
          {
            v15 = *v14;
            if( *v14 < 0 )
            {
              v16 = v15 & 0x7FFFFFFFFFFFFFFFi64;
              if( v3 < v16 + 10000000 )
              {
                if( v3 < v16 )
                  break;
LABEL_38:
                v3 = v21;
                break;
              }
              v3 -= 10000000i64;
            }
            else if( v3 < v15 + 10000000 )
            {
              if( v3 < v15 )
                break;
              v3 = 2 * v3 - v15;
            }
            else
            {
              v3 += 10000000i64;
            }
            v13.QuadPart = v13.anonymous_0.LowPart + 1;
            ++v14;
          }
          while( v13.anonymous_0.LowPart < v12 );
        }
        if( v3 <= (unsigned __int64)(v24.QuadPart + 300000000) )
        {
          v24.QuadPart += 300000000i64;
          RtlpTimeToTimeFields(&v24, &TimeFields, v13);
          *(_TIME_FIELDS *)((char *)&CmpDummyThreadEvent + 5762) = TimeFields;
          HalpSetWakeAlarm(v17, (UINT8 *)&TimeFields, v18);
          LODWORD(v3) = 1024;
          Input = 1024;
          if( *(&CmpDummyThreadEvent + 4992) )
            LODWORD(v3) = HalpAcpiPmRegisterWrite(PM1A_EVT_REGISTER, 0i64, &Input, 2ui64, 0i64);
          if( *(&CmpDummyThreadEvent + 5136) )
            LODWORD(v3) = HalpAcpiPmRegisterWrite(PM1B_EVT_REGISTER, 0i64, &Input, 2ui64, 0i64);
        }
      }
    }
  }
  return v3;
}

Referenced by:

HaliAcpiSleep