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