IoInitializeProcessor

NTSTATUS __stdcall IoInitializeProcessor(_KPRCB *Prcb, _IO_PROC_INIT_VALUES *InitValues){
  _IO_PROC_INIT_VALUES *p_InitValuesa; 
  _GENERAL_LOOKASIDE *PoolWithTag; 
  _GENERAL_LOOKASIDE *v6; 
  int LookasideIrpLimit; 
  _GENERAL_LOOKASIDE *v8; 
  _GENERAL_LOOKASIDE *v9; 
  _GENERAL_LOOKASIDE *v10; 
  _IO_PROC_INIT_VALUES InitValuesa; 

  memset(&InitValuesa, 0, sizeof(InitValuesa));
  if( !InitValues )
    IopQueryProcessorInitValues(&InitValuesa);
  p_InitValuesa = &InitValuesa;
  if( InitValues )
    p_InitValuesa = InitValues;
  PoolWithTag = (_GENERAL_LOOKASIDE *)ExAllocatePoolWithTag(0x200ui64, 0x280ui64, 28489i64);
  v6 = PoolWithTag;
  if( dword_140CEBEF8 > 0 )
    LookasideIrpLimit = p_InitValuesa->LookasideIrpLimit;
  else
    LookasideIrpLimit = 0x7FFFFFFF;
  Prcb->LookasideIrpFloat = LookasideIrpLimit;
  Prcb->PPLookasideList[7].L = (_GENERAL_LOOKASIDE *)&IopCompletionLookasideList;
  if( PoolWithTag )
    ExInitializeSystemLookasideList(
      (_DWORD)PoolWithTag++,
      512,
      56,
      1349542729,
      p_InitValuesa->CompletionZoneSize,
      (__int64)&WheapDeferredInternalLogsEventLock + 2896);
  else
    v6 = (_GENERAL_LOOKASIDE *)&IopCompletionLookasideList;
  Prcb->PPLookasideList[7].P = v6;
  Prcb->PPLookasideList[2].L = (_GENERAL_LOOKASIDE *)&IopLargeIrpLookasideList;
  v8 = PoolWithTag;
  if( PoolWithTag )
    ExInitializeSystemLookasideList(
      (_DWORD)PoolWithTag++,
      512,
      p_InitValuesa->LargePacketSize,
      1282437705,
      p_InitValuesa->LargeIrpZoneSize,
      (__int64)&WheapDeferredInternalLogsEventLock + 2896);
  else
    v8 = (_GENERAL_LOOKASIDE *)&IopLargeIrpLookasideList;
  Prcb->PPLookasideList[2].P = v8;
  Prcb->PPLookasideList[1].L = (_GENERAL_LOOKASIDE *)&IopMediumIrpLookasideList;
  v9 = PoolWithTag;
  if( PoolWithTag )
    ExInitializeSystemLookasideList(
      (_DWORD)PoolWithTag++,
      512,
      p_InitValuesa->MediumPacketSize,
      1299214921,
      p_InitValuesa->MediumIrpZoneSize,
      (__int64)&WheapDeferredInternalLogsEventLock + 2896);
  else
    v9 = (_GENERAL_LOOKASIDE *)&IopMediumIrpLookasideList;
  Prcb->PPLookasideList[1].P = v9;
  Prcb->PPLookasideList[0].L = (_GENERAL_LOOKASIDE *)&IopSmallIrpLookasideList;
  v10 = PoolWithTag;
  if( PoolWithTag )
    ExInitializeSystemLookasideList(
      (_DWORD)PoolWithTag++,
      512,
      p_InitValuesa->SmallPacketSize,
      1399878217,
      p_InitValuesa->SmallIrpZoneSize,
      (__int64)&WheapDeferredInternalLogsEventLock + 2896);
  else
    v10 = (_GENERAL_LOOKASIDE *)&IopSmallIrpLookasideList;
  Prcb->PPLookasideList[0].P = v10;
  Prcb->PPLookasideList[3].L = (_GENERAL_LOOKASIDE *)&IopMdlLookasideList;
  if( PoolWithTag )
    ExInitializeSystemLookasideList(
      (_DWORD)PoolWithTag,
      512,
      p_InitValuesa->MdlPacketSize,
      1349280845,
      p_InitValuesa->MdlZoneSize,
      (__int64)&WheapDeferredInternalLogsEventLock + 2896);
  else
    PoolWithTag = (_GENERAL_LOOKASIDE *)&IopMdlLookasideList;
  Prcb->PPLookasideList[3].P = PoolWithTag;
  if( (*(&stru_140C452E0 + 1144) & 3) != 0 )
  {
    memset(&Prcb->IoIrpStackProfilerCurrent, 0i64, 0x50u);
    Prcb->IoIrpStackProfilerCurrent.TotalIrps = 0;
    memset(&Prcb->IoIrpStackProfilerPrevious, 0i64, 0x50u);
    Prcb->IoIrpStackProfilerPrevious.TotalIrps = 0;
  }
  return 0;
}

Referenced by:

IoInitSystemPreDrivers
KiStartDynamicProcessor