KeInitializeTimerTable
__int64 __fastcall KeInitializeTimerTable(__int64 a1, _BYTE *a2){
unsigned __int8 v3;
__int64 v4;
__int64 v5;
__int64 v6;
__int64 v8;
__int64 *v9;
__int64 v10;
__int64 *PoolWithTag;
if( !*(_DWORD *)(a1 + 36) )
{
if( KiSerializeTimerExpiration )
{
if( KiSerializeTimerExpiration != 1 )
KiSerializeTimerExpiration = 0;
}
else if( (unsigned __int8)off_140C00860[0]() )
{
KiSerializeTimerExpiration = 1;
}
KiInitializeTimer2Data(a1, a2);
}
v3 = *(_BYTE *)(a1 + 208);
if( !KiPendingTimerBitmaps[2 * v3 + 1] )
{
v8 = 0x4000i64;
if( v3 )
{
if( KiSerializeTimerExpiration )
{
v9 = 0i64;
}
else
{
PoolWithTag = (__int64 *)ExAllocatePoolWithTag(NonPagedPoolNxCacheAligned, 0x4000ui64, 0x6254654Bui64);
v9 = PoolWithTag;
if( !PoolWithTag )
return 3221225626i64;
memset((INT64)PoolWithTag, 0i64);
v3 = *(_BYTE *)(a1 + 208);
}
}
else
{
v9 = KiPendingTimersMask0;
if( KiSerializeTimerExpiration )
v8 = 32i64;
}
v10 = 2i64 * v3;
KiPendingTimerBitmaps[v10] = 8 * v8;
KiPendingTimerBitmaps[v10 + 1] = (__int64)v9;
}
*(_DWORD *)(a1 + 12596) = KUSER_SHARED_DATA.TickCount.LowPart;
KeInitializeDpc((PRKDPC)(a1 + 31792), KiTimerExpirationDpc, 0i64);
if( !*(_QWORD *)(a1 + 31848) )
*(_WORD *)(a1 + 31794) = *(_DWORD *)(a1 + 36) + 1280;
v4 = a1 + 15176;
v5 = 2i64;
do
{
v6 = 256i64;
do
{
*(_QWORD *)(v4 - 8) = 0i64;
*(_DWORD *)(v4 + 20) = -1;
*(_DWORD *)(v4 + 16) = 0;
*(_QWORD *)(v4 + 8) = v4;
*(_QWORD *)v4 = v4;
v4 += 32i64;
--v6;
}
while( v6 );
--v5;
}
while( v5 );
KiInitializeForceIdle(a1);
return 0i64;
}Referenced by:
KeInitSystem
KeStartAllProcessors
KiStartDynamicProcessor