HalpTimerConvertAuxiliaryCounter

NTSTATUS __stdcall HalpTimerConvertAuxiliaryCounter(
        UINT64 ConvertFromCounter,
        UINT64 ConvertFromCounterFreq,
        UINT64 ConvertToCounter,
        UINT64 ConvertToCounterFreq,
        UINT64 ValueToConvert,
        UINT64 *ValueConverted,
        UINT64 *ErrorOut){
  UINT64 v7; 
  UINT64 *v9; 
  UINT64 v10; 
  NTSTATUS result; 
  ULONGLONG v14; 
  ULONGLONG v15; 
  __int64 v16; 
  UINT64 *v17; 
  ULONGLONG pullResult; 
  pullResult = 0i64;
  v7 = 0i64;
  v9 = ValueConverted;
  v10 = ValueToConvert - ConvertFromCounter;
  if( ConvertFromCounter >= ValueToConvert )
    v10 = ConvertFromCounter - ValueToConvert;
  if( v10 / ConvertFromCounterFreq >= 0xA )
  {
    result = -1073741811;
    goto LABEL_13;
  }
  if( RtlULongLongMult(ConvertToCounterFreq, v10, &pullResult) < 0 )
    goto LABEL_6;
  v15 = pullResult / ConvertFromCounterFreq;
  v7 = 0x3B9ACA00 / ConvertToCounterFreq;
  if( ConvertFromCounter >= ValueToConvert )
  {
    if( v14 < v15 )
    {
LABEL_6:
      result = -1073741823;
      goto LABEL_13;
    }
    result = 0;
    *v9 = v14 - v15;
  }
  else
  {
    v16 = -1i64;
    if( v15 + v14 >= v15 )
      v16 = v15 + v14;
    result = v15 + v14 < v15 ? 0xC0000095 : 0;
    *v9 = v16;
  }
LABEL_13:
  v17 = ErrorOut;
  if( ErrorOut )
    *ErrorOut = v7;
  if( result < 0 )
  {
    if( v17 )
      *v17 = 0i64;
    *v9 = 0i64;
  }
  return result;
}

Referenced by:

HalpTimerConvertAuxiliaryCounterToPerformanceCounter
HalpTimerConvertPerformanceCounterToAuxiliaryCounter