HalpTimerConvertPerformanceCounterToAuxiliaryCounter

NTSTATUS __stdcall HalpTimerConvertPerformanceCounterToAuxiliaryCounter(
        UINT64 PerformanceCounterValue,
        UINT64 *AuxiliaryCounterValueOut,
        UINT64 *ConversionErrorOut){
  UINT64 v3; 
  UINT64 v5; 
  ULONGLONG v6; 
  NTSTATUS v9; 
  UINT64 v10; 
  UINT64 v11; 
  NTSTATUS v12; 
  ULONGLONG pullResult; 
  UINT64 CurrentAuxOut; 
  UINT64 CurrentQpcOut; 
  UINT64 ValueConverted; 
  UINT64 ErrorOut[2]; 
  ULONGLONG ullMultiplicand; 
  CurrentAuxOut = 0i64;
  v3 = 0i64;
  CurrentQpcOut = 0i64;
  ullMultiplicand = 0i64;
  v5 = 0i64;
  pullResult = 0i64;
  v6 = 0i64;
  ValueConverted = 0i64;
  ErrorOut[0] = 0i64;
  if( !HalpAuxiliaryCounter )
  {
    v9 = -1073741637;
    goto LABEL_12;
  }
  v10 = HalpTimerQpcFreqForAuxQpcConversion;
  v11 = *((_QWORD *)HalpAuxiliaryCounter + 24);
  if( HalpTimerQpcFreqForAuxQpcConversion && v11 )
  {
    if( PerformanceCounterValue < HalpTimerEarliestQpcAllowedToConvert )
    {
      v9 = -1073741811;
      goto LABEL_12;
    }
    HalpTimerCaptureCurrentAuxiliaryQpcPair(&CurrentQpcOut, &CurrentAuxOut, &ullMultiplicand);
    if( RtlULongLongMult(ullMultiplicand, 0x3B9ACA00ui64, &pullResult) < 0 )
    {
      v9 = -1073741823;
      goto LABEL_12;
    }
    v6 = pullResult / v10;
    v12 = HalpTimerConvertAuxiliaryCounter(
            CurrentQpcOut,
            v10,
            CurrentAuxOut,
            v11,
            PerformanceCounterValue,
            &ValueConverted,
            ErrorOut);
    v5 = ValueConverted;
    v9 = v12;
    v3 = ErrorOut[0];
  }
  else
  {
    v9 = -1073741637;
  }
  if( v9 < 0 )
  {
LABEL_12:
    *AuxiliaryCounterValueOut = 0i64;
    if( ConversionErrorOut )
      *ConversionErrorOut = 0i64;
    return v9;
  }
  *AuxiliaryCounterValueOut = v5;
  if( ConversionErrorOut )
    *ConversionErrorOut = v6 + v3;
  return v9;
}

Referenced by:

No references.