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