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.