HalpTimerConvertAuxiliaryCounterToPerformanceCounter

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

Referenced by:

No references.