KiInitializeProcessor
NTSTATUS __stdcall KiInitializeProcessor(_KPRCB *Prcb){
UINT8 v1;
unsigned int Number;
int v4;
__int64 v5;
unsigned __int64 v6;
unsigned __int64 v7;
unsigned __int64 v8;
void **PoolWithTag;
size_t v10;
unsigned __int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
if( KeThreadDpcEnable )
{
KeInitializeGate((_KGATE *)Prcb->gap7B80, v1);
KiInitializeDpcList(&Prcb->DpcData[1].DpcList);
Prcb->DpcData[1].DpcLock = 0i64;
Prcb->DpcData[1].DpcQueueDepth = 0;
}
if( KeDpcWatchdogPeriod )
{
KeInitializeThreadedDpc((INT64)&Prcb->DpcWatchdogDpc, (INT64)KiDpcWatchdog, Prcb->Number);
Number = Prcb->Number;
Prcb->DpcWatchdogDpc.Importance = 2;
if( !Prcb->DpcWatchdogDpc.DpcData )
Prcb->DpcWatchdogDpc.Number = Number + 1280;
KeInitializeTimerEx((INT64)&Prcb->DpcWatchdogTimer, 0);
v4 = KeMaximumIncrement;
v5 = (unsigned int)KeMaximumIncrement;
v6 = ((unsigned int)KeMaximumIncrement + 10000 * (unsigned __int64)(unsigned int)KeDpcWatchdogPeriod - 1)
/ (unsigned int)KeMaximumIncrement;
if( v6 > 0xFFFFFFFF )
v6 = 0xFFFFFFFFi64;
Prcb->DpcWatchdogCount = 0;
Prcb->DpcWatchdogSequenceNumber = 0;
Prcb->DpcWatchdogPeriod = v6;
v7 = v6 * v5 / 0x4E20;
if( v7 > 0xFFFFFFFF )
v7 = 0xFFFFFFFFi64;
KeSetCoalescableTimer((INT64)&Prcb->DpcWatchdogTimer, (unsigned int)-v4, v7, 0xFAui64, (INT64)&Prcb->DpcWatchdogDpc);
}
if( KiDPCTimeout )
{
v8 = (10000i64 * (unsigned int)KiDPCTimeout + (unsigned __int64)(unsigned int)KeMaximumIncrement - 1)
/ (unsigned int)KeMaximumIncrement;
if( v8 > 0xFFFFFFFF )
LODWORD(v8) = -1;
Prcb->DpcTimeLimit = v8;
}
if( dword_140C50A78 )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 8i64 * dword_140C50A78, 1347905867i64);
Prcb->DpcWatchdogProfile = PoolWithTag;
if( PoolWithTag )
{
v10 = 8 * dword_140C50A78;
Prcb->DpcWatchdogProfileCurrentEmptyCapture = PoolWithTag;
memset(PoolWithTag, 0i64, v10);
v11 = (unsigned int)KeMaximumIncrement;
v12 = (10000i64 * (unsigned int)dword_140C50A7C + (unsigned __int64)(unsigned int)KeMaximumIncrement - 1)
/ (unsigned int)KeMaximumIncrement;
if( v12 > 0xFFFFFFFF )
LODWORD(v12) = -1;
Prcb->DpcWatchdogProfileCumulativeDpcThreshold = v12;
v13 = (10000i64 * (unsigned int)dword_140C50A80 + v11 - 1) / v11;
if( v13 > 0xFFFFFFFF )
LODWORD(v13) = -1;
Prcb->DpcWatchdogProfileSingleDpcThreshold = v13;
}
else
{
Prcb->DpcWatchdogProfileCumulativeDpcThreshold = 0;
Prcb->DpcWatchdogProfileSingleDpcThreshold = 0;
Prcb->DpcWatchdogProfileCurrentEmptyCapture = 0i64;
}
}
return 0;
}Referenced by:
KeInitSystem
KiInitializeDynamicProcessorDpc