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.