KiSetupTimeIncrement
VOID __stdcall KiSetupTimeIncrement(UINT64 MaxIncrement, UINT64 MinIncrement){
unsigned int v3;
int v4;
unsigned int v5;
UINT64 v6;
LARGE_INTEGER v7;
__int64 QuadPart;
unsigned __int64 v9;
unsigned __int64 v10;
CHAR v11;
CHAR LeftShift;
union _LARGE_INTEGER PerformanceFrequency;
PerformanceFrequency.QuadPart = 0i64;
v11 = 0;
v3 = 156250;
v4 = MinIncrement;
if( (unsigned int)MinIncrement <= 0x1388 )
v4 = 5000;
v5 = KiMinDynamicTickDuration;
KeMinimumIncrement = v4;
if( MaxIncrement < 0x2625A )
v3 = MaxIncrement;
KeMaximumIncrement = v3;
if( (unsigned int)MinIncrement > KiMinDynamicTickDuration )
{
v5 = MinIncrement;
KiMinDynamicTickDuration = MinIncrement;
}
v6 = KiMaxDynamicTickDuration;
if( MaxIncrement < KiMaxDynamicTickDuration )
{
v6 = MaxIncrement;
KiMaxDynamicTickDuration = MaxIncrement;
}
if( v6 < v5 )
KiMaxDynamicTickDuration = v5;
KiTickOffset = v3;
LeftShift = 0;
KiMaximumIncrementReciprocal = RtlpComputeFraction(1ui64, v3, &LeftShift);
KeNumberProcessorsGroup0[2] = -LeftShift;
v7 = KeQueryPerformanceCounter(&PerformanceFrequency);
QuadPart = PerformanceFrequency.QuadPart;
KeTimeAdjustmentFrequency = PerformanceFrequency.QuadPart;
v9 = v7.QuadPart;
v10 = RtlGenerateQpcToIncrementConstants(PerformanceFrequency.LowPart, &v11);
KUSER_SHARED_DATA.QpcFrequency = QuadPart;
KUSER_SHARED_DATA.QpcInterruptTimeIncrement = v10;
KUSER_SHARED_DATA.QpcInterruptTimeIncrementShift = v11;
KUSER_SHARED_DATA.QpcSystemTimeIncrement = v10;
KUSER_SHARED_DATA.QpcSystemTimeIncrementShift = v11;
KUSER_SHARED_DATA.BaselineSystemTimeQpc = v9;
KUSER_SHARED_DATA.BaselineInterruptTimeQpc = v9;
KiBalanceSetManagerPeriod = 0x989680 / KeMaximumIncrement;
*(_DWORD *)KiBalanceSetManagerCount = 0x989680 / KeMaximumIncrement;
}Referenced by:
KeInitializeClock