KiInitializeProcessor
INT64 __fastcall KiInitializeProcessor(_KPRCB *Prcb){
INT64 v1;
int v3;
ULONG v4;
__int64 v5;
unsigned __int64 v6;
unsigned __int64 v7;
unsigned __int64 v8;
VOID *PoolWithTag;
unsigned __int64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
if( KeThreadDpcEnable )
{
KeInitializeGate((_KGATE *)((char *)Prcb + 31616), v1);
KiInitializeDpcList((_KDPC_LIST *)((char *)Prcb + 12520));
*((_QWORD *)Prcb + 1567) = 0i64;
*((_DWORD *)Prcb + 3136) = 0;
}
if( KeDpcWatchdogPeriod )
{
KeInitializeThreadedDpc((PRKDPC)((char *)Prcb + 33368), KiDpcWatchdog, (PVOID)*((unsigned int *)Prcb + 9));
v3 = *((_DWORD *)Prcb + 9);
*((_BYTE *)Prcb + 33369) = 2;
if( !*((_QWORD *)Prcb + 4178) )
*((_WORD *)Prcb + 16685) = v3 + 1280;
KeInitializeTimerEx((PKTIMER)((char *)Prcb + 33432), NotificationTimer);
v4 = KeMaximumIncrement;
v5 = KeMaximumIncrement;
v6 = (KeMaximumIncrement + 10000 * (unsigned __int64)(unsigned int)KeDpcWatchdogPeriod - 1) / KeMaximumIncrement;
if( v6 > 0xFFFFFFFF )
v6 = 0xFFFFFFFFi64;
*((_DWORD *)Prcb + 7931) = 0;
*((_DWORD *)Prcb + 7947) = 0;
*((_DWORD *)Prcb + 7930) = v6;
v7 = v6 * v5 / 0x4E20;
if( v7 > 0xFFFFFFFF )
LODWORD(v7) = -1;
KeSetCoalescableTimer((PKTIMER)((char *)Prcb + 33432), (LARGE_INTEGER)-v4, v7, 0xFAu, (PKDPC)((char *)Prcb + 33368));
}
if( KiDPCTimeout )
{
v8 = (10000i64 * (unsigned int)KiDPCTimeout + (unsigned __int64)KeMaximumIncrement - 1) / KeMaximumIncrement;
if( v8 > 0xFFFFFFFF )
LODWORD(v8) = -1;
*((_DWORD *)Prcb + 8104) = v8;
}
if( KiDpcWatchdogProfileArrayLength )
{
PoolWithTag = ExAllocatePoolWithTag(
NonPagedPoolNx,
8i64 * (unsigned int)KiDpcWatchdogProfileArrayLength,
0x5057694Bui64);
*((_QWORD *)Prcb + 4245) = PoolWithTag;
if( PoolWithTag )
{
*((_QWORD *)Prcb + 4246) = PoolWithTag;
memset((INT64)PoolWithTag, 0i64);
v10 = KeMaximumIncrement;
v11 = (10000i64 * (unsigned int)KiDpcWatchdogProfileCumulativeDpcThreshold
+ (unsigned __int64)KeMaximumIncrement
- 1)
/ KeMaximumIncrement;
if( v11 > 0xFFFFFFFF )
LODWORD(v11) = -1;
*((_DWORD *)Prcb + 7933) = v11;
v12 = (10000i64 * (unsigned int)KiDpcWatchdogProfileSingleDpcThreshold + v10 - 1) / v10;
if( v12 > 0xFFFFFFFF )
LODWORD(v12) = -1;
*((_DWORD *)Prcb + 8128) = v12;
}
else
{
*((_DWORD *)Prcb + 7933) = 0;
*((_DWORD *)Prcb + 8128) = 0;
*((_QWORD *)Prcb + 4246) = 0i64;
}
}
return 0i64;
}Referenced by:
KeInitSystem
KiInitializeDynamicProcessorDpc